为什么按下的键没有触发任何事件



下面的程序显示黑屏并提示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。但是当我按下一个键时,什么也没有显示。有什么问题吗?

也许你想要一个窗口,但你有两个问题:

  1. 在使用Swing应用程序时应该扩展JWindow,而不是Window
  2. 即使扩展JWindow也不会工作,因为JWindow不会接收KeyEvent,除非它的父JFrame是可见的。

所以你应该使用JFrame。如果您不想要标题栏和边框,那么您可以使用未修饰的JFrame。

另外,您不应该使用KeyListener,因为即使在JFrame上,键事件也只会被分派给被关注的组件。相反,您应该使用键绑定。在这种情况下,似乎您应该将绑定添加到框架的根窗格。

扩展JFrame并去掉super调用

相关内容

  • 没有找到相关文章

最新更新