之前在建立了面板A,并且添加了监听,都能起作用,一切正常,
但是后来又向窗体里面添加了另一个面板B,
再次运行时监听不再对A起作用了,反倒作用到了B上,
B上面我添加的有按钮以及下拉列表等组件,可以看到我按键盘后确实是作用到B上了,但是我想让键盘监听一直作用在A上,而不管如何操作B。
逛了论坛有的说用requestFocus()方法,
试了试,可能还是我哪个地方出错了吧,没解决
希望有知道的大神来解决下这个小问题!谢谢!
给JPanel面板添加键盘监听后监听失效了。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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
实例和两个面板:panel1
和panel2
。panel1
包含一个按钮和一个下拉菜单,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关系验证