keyListener에 프레임을 등록했지만 keyListener가 작업을 실행하지 않습니다. 다른 코드에서는 KeyListener 인터페이스를 구현하고 JFrame을 등록하고 적절한 메서드를 재정의하는 것이 keyListener가 작동하는 데 필요한 모든 것입니다.KeyListener가 작업을 트리거하지 않음
import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Mains implements KeyListener {
private static Point point = new Point();
public Mains() {
final JFrame frame = new JFrame();
frame.setUndecorated(true);
JButton button = new JButton("Close Me");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
frame.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
point.x = e.getX();
point.y = e.getY();
}
});
frame.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
Point p = frame.getLocation();
frame.setLocation(p.x + e.getX() - point.x, p.y + e.getY()
- point.y);
}
});
frame.setSize(300, 300);
frame.setLocation(200, 200);
frame.setLayout(new BorderLayout());
frame.getContentPane().add(button, BorderLayout.NORTH);
frame.getContentPane().add(new JLabel("Drag Me", JLabel.CENTER),
BorderLayout.CENTER);
frame.setVisible(true);
frame.addKeyListener(this);
}
public static void main(String[] args) {
new Mains();
}
public void keyPressed(KeyEvent e) {
System.out.println("pressed");
}
public void keyReleased(KeyEvent e) {
System.out.println("released");
}
public void keyTyped(KeyEvent e) {
}
}
감사를 찾을 수 있습니다 key bindings
를 사용하는 것이 좋습니다, 거의 선택의 오른쪽 API입니다. 물론 다른 코드에서는 setFocusable (true) 메서드를 추가 한 곳이 없었지만 코드가 제대로 작동 했으므로 나를 계몽 할 수 있습니까? –
업데이트를 참조하십시오. Swing에서 사용하기 위해'Key Bindings'를 추천합니다. – Reimeus