Добавить Keylistener в полноэкранный JWindow - PullRequest
0 голосов
/ 26 мая 2011

Я сделал полноэкранный JWindow и хочу добавить простой KeyListener, который в случае нажатия клавиш со стрелками делает что-то
Но я не знаю, почему он не работает.Я добавил keylistener для всех компонентов.Но все же не работает
кто знает в чем проблема?

Ответы [ 2 ]

3 голосов
/ 26 мая 2011

По умолчанию 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 .

1 голос
/ 26 мая 2011

Вероятно, это просто вопрос настройки соответствующего компонента для фокусировки.EG

myContentPane.setFocusable(true);
...