我试图将键和鼠标监听器添加到JFrame,它没有用,我也发现JFrame无法获得焦点。我有一个函数加载缓冲的图像,我想在整个图像维度添加鼠标和键监听器。
public void imageloader(BufferedImage image) throws InterruptedException {
// frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension dimension = new Dimension(image.getWidth(), image.getHeight());
setSize(200, 100);
setVisible(true);
label.removeAll(); //label is Jlabel
label.setIcon(new ImageIcon(image));
frame.setSize(dimension);
label.revalidate();
JScrollPane pane = new JScrollPane(label,
ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
frame.getContentPane().add(pane);
frame.setSize(dimension);
// frame.setVisible(true);
}
如何在不移动此功能的部件的情况下将鼠标和键侦听器添加到此图像框架中?
答案 0 :(得分:2)
使用KeyBindings代替KeyListener,例如similair为here
原因是Swing处理事件的方式。你需要一个专注于KeyListener
的小部件才能工作 - 没有焦点,任何KeyListener
都会被忽略(否则,输入会添加到你UI中的所有TextField
而不是只有重点)。
原始KeyBindings
API不关心焦点 - 如果没有子窗口处理事件,将调用侦听器。
答案 1 :(得分:2)
将MouseListener添加到标签中。使用键绑定来表示关键事件。
答案 2 :(得分:0)
我使用Layered panes解决了这个问题。我使用一个窗格显示缓冲图像,然后使用下一个窗格来监听鼠标和键盘事件。