현재 포커스가있는 구성 요소에 상관없이 내 최상위 JFrame은 물론 JDesktopPane이 키 이벤트를 항상 듣고 싶습니다.JFrame/JDesktop이 키 포커스를 수신하지 않습니다.
현재이 프로그램을 실행하면 JFrame이 키 이벤트를 수신하고 있습니다. 확인을 누릅니다. 그러나 JinternalFrame을 클릭하면 이벤트가 더 이상 JFrame에 도달하지 않습니다. JInternalFrame 외부 (JDesktop 구성 요소라고 가정 됨)를 클릭하더라도 처음부터했던 것처럼 이벤트는 더 이상 JFrame에 도달하지 않습니다. 왜? 고마워. 당신이 당신의 JFrame의 상관없이 초점에 어떤 요소의 모든 키 이벤트를 수신하지 않습니다 수 있도록하고 싶습니다 때문에
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class focus extends JFrame implements KeyListener {
private focus() {
JDesktopPane desktop = new JDesktopPane();
setContentPane(desktop);
addPane(this, "one");
addPane(this, "two");
addPane(this, "three");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setSize(400, 450);
addKeyListener(this);
}
public static void main(String[] args) {
focus t = new focus();
}
private void addPane(JFrame frame, String name) {
JTextArea textArea = new JTextArea();
textArea.setName(name);
textArea.setEditable(false);
addWindow(frame, textArea, name);
}
private JInternalFrame addWindow(JFrame frame, JComponent component,
String name) {
JScrollPane scrollablePane = new JScrollPane(component);
JInternalFrame iframe = new JInternalFrame(name + " ", true, true,
true, true);
iframe.setSize(300, 300);
iframe.setLocation((int) (100 * Math.random()),
(int) (100 * Math.random()));
iframe.setVisible(true);
iframe.getContentPane().add(scrollablePane);
frame.getContentPane().add(iframe);
return iframe;
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
System.err.println(e.getKeyChar());
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}