下面的程序显示黑屏并提示ALARM !:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class displayFullScreen extends Window {
private JLabel alarmMessage = new JLabel("Alarm !");
public displayFullScreen() {
super(new JFrame());
setLayout(new FlowLayout(FlowLayout.CENTER));
alarmMessage.setFont(new Font("Cambria",Font.BOLD,100));
alarmMessage.setForeground(Color.CYAN);
add(alarmMessage);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(0,0,screenSize.width,screenSize.height);
setBackground(Color.black);
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent ke) {
escapeHandler(ke);
}
});
}
public void escapeHandler(KeyEvent ke) {
if(ke.getKeyCode() == ke.VK_ESCAPE) {
System.out.println("escaped !");
} else {
System.out.println("Not escaped !");
}
}
public static void main(String args[]) {
new displayFullScreen().setVisible(true);
}
}
我在这个程序中设置了一个键处理程序。处理程序捕获焦点在window上时按下的键。当按下转义键时,应显示escaped !
,否则显示!escaped
。但是当我按下一个键时,什么也没有显示。有什么问题吗?
也许你想要一个窗口,但你有两个问题:
- 在使用Swing应用程序时应该扩展JWindow,而不是Window
- 即使扩展JWindow也不会工作,因为JWindow不会接收KeyEvent,除非它的父JFrame是可见的。
所以你应该使用JFrame。如果您不想要标题栏和边框,那么您可以使用未修饰的JFrame。
另外,您不应该使用KeyListener,因为即使在JFrame上,键事件也只会被分派给被关注的组件。相反,您应该使用键绑定。在这种情况下,似乎您应该将绑定添加到框架的根窗格。
扩展JFrame并去掉super调用