将Keylistener添加到全屏JWindow



我制作了一个全屏JWindow,我想添加一个简单的KeyListener,在按下箭头键的情况下可以做一些事情
但我不知道为什么它不起作用。我已经将keylistener添加到所有组件中。但它仍然不起作用
谁知道出了什么问题?

默认情况下,除非在创建窗口时指定JFrame作为所有者,否则JWindow不会接收关键事件。以下代码演示了这一点:

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。您应该使用密钥绑定。

这可能只是将相关组件设置为可聚焦的问题。例如

myContentPane.setFocusable(true);

相关内容

  • 没有找到相关文章

最新更新