我制作了一个全屏 JWindow,我想添加一个简单的 KeyListener,以便在按下箭头键的情况下执行某些操作
但我不知道为什么它不起作用。我已将 keylistener 添加到所有组件中。但它不起作用
谁知道问题出在哪里?
问问题
1759 次
2 回答
3
默认情况下,JWindow 不会接收关键事件,除非您在创建窗口时将 JFrame 指定为所有者。下面的代码演示了这一点:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class WindowTest
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// frame.setLocation(-200, 0); // uncomment this line to hide the dummy frame
frame.setVisible( true );
JWindow window = new JWindow(); // this doesn't work
// JWindow window = new JWindow(frame); // this works
window.getContentPane().add( new JTextField(10), BorderLayout.NORTH );
window.getContentPane().add( new JButton("Button") );
String[] items = { "Select Item", "Color", "Shape", "Fruit" };
JComboBox mainComboBox = new JComboBox( items );
window.getContentPane().add( mainComboBox, BorderLayout.SOUTH );
window.setBounds(50, 50, 200, 200);
window.setVisible(true);
window.getRootPane().setBorder(new javax.swing.border.MatteBorder(4, 4, 4, 4, Color.BLUE));
}
}
一个更简单的解决方案是使用未修饰的 JFrame:
JFrame frame = new JFrame();
frame.setUndecorated(true);
我想添加一个简单的 KeyListener 在按下箭头键的情况下做一些事情
此外,您不应该为此使用 KeyListener。你应该使用Key Bindings。
于 2011-05-26T15:07:21.427 回答
1
这可能只是将相关组件设置为可聚焦的问题。例如
myContentPane.setFocusable(true);
于 2011-05-26T11:23:49.697 回答