gpt4 book ai didi

java - KeyListener 不触发操作

转载 作者:行者123 更新时间:2023-12-02 11:13:00 28 4
gpt4 key购买 nike

尽管我将框架注册到了 keyListener,但 keyListener 并未触发操作。在其他代码中,实现 KeyListener 接口(interface)、注册 JFrame 并重写适当的方法就是 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) {

}
}

最佳答案

KeyListerner 仅当其附加的组件可以接收焦点并且具有焦点时才能够接收按键事件。

JFrame 的问题在于它包含一个 JRootPane,其中包含一个占据框架整个表面的内容 Pane ,这将阻止框架获得focus,这个,永远无法接收关键事件。

KeyListener 很少是正确的 API 选择,通常最好使用 key bindings

您还可以找到How to use root panes感兴趣的

关于java - KeyListener 不触发操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14447130/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com