之前在建立了面板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已经设置了焦点。你可以根据你的需求调整上述示例,以满足你的具体需求。
解决 无用评论 打赏 举报