BestBigKK 2017-11-10 16:08 采纳率: 0%
浏览 2466

给JPanel面板添加键盘监听后监听失效了。

之前在建立了面板A,并且添加了监听,都能起作用,一切正常,
但是后来又向窗体里面添加了另一个面板B,
再次运行时监听不再对A起作用了,反倒作用到了B上,
B上面我添加的有按钮以及下拉列表等组件,可以看到我按键盘后确实是作用到B上了,但是我想让键盘监听一直作用在A上,而不管如何操作B。
逛了论坛有的说用requestFocus()方法,
试了试,可能还是我哪个地方出错了吧,没解决
希望有知道的大神来解决下这个小问题!谢谢!

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 03:58
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于Java Swing中事件处理机制的不稳定性导致的。如果你使用的是Swing中的ComponentListener接口,那么你必须确保所有的子组件都实现了这个接口。否则,它们将不会响应焦点变化事件。以下是一个简单的例子:

    import javax.swing.*;
    
    public class KeyListenerDemo extends JFrame {
        public static void main(String[] args) {
            KeyListenerDemo frame = new KeyListenerDemo();
            frame.setVisible(true);
        }
    
        private final ComponentListener listener = e -> System.out.println("Key event");
    
        public KeyListenerDemo() {
            JPanel panel1 = new JPanel(new BorderLayout());
            JButton button1 = new JButton("Button");
            panel1.add(button1);
    
            JPanel panel2 = new JPanel(new GridLayout(0, 3));
            for (int i = 0; i < 3; i++) {
                JComboBox<String> combo = new JComboBox<>(new String[]{"Option" + i});
                panel2.add(combo);
            }
            
            add(panel1, BorderLayout.NORTH);
            add(panel2, BorderLayout.CENTER);
    
            addKeyListener(listener);
        }
    }
    

    在这个例子中,我们创建了一个名为KeyListenerDemo的类,它包含一个JFrame实例和两个面板:panel1panel2panel1包含一个按钮和一个下拉菜单,panel2包含三个下拉菜单。然后我们在addKeyListener方法中添加了一个KeyListener实例,用于处理焦点改变事件。

    现在,当你在panel1上按下按钮或选择下拉菜单项时,所有这些操作都将被记录下来。请注意,虽然panel2也添加了监听器,但它不会触发任何事件,因为panel1已经设置了焦点。

    你可以根据你的需求调整上述示例,以满足你的具体需求。

    评论

报告相同问题?

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证