Я сделал полноэкранный JWindow и хочу добавить простой KeyListener, который при нажатии клавиш со стрелками что-то делает
Но я не знаю, почему он не работает. Я добавил прослушиватель ключей ко всем компонентам. Но пока не работает
кто знает в чем проблема?
Добавить Keylistener в полноэкранный JWindow
comment
@jzd: +1 - побей меня. Я был слишком занят случайными предположениями. ;)
- person Andrew Thompson   schedule 26.05.2011
comment
почему вы откатили мою версию?
- person jzd   schedule 26.05.2011
Ответы (2)
По умолчанию 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. Вам СЛЕДУЕТ использовать привязки клавиш.
person
camickr
schedule
26.05.2011
Вероятно, это просто вопрос настройки соответствующего компонента для фокусировки. НАПРИМЕР.
myContentPane.setFocusable(true);
person
Andrew Thompson
schedule
26.05.2011