gpt4 book ai didi

java - 按键绑定(bind)不起作用 - swing

转载 作者:行者123 更新时间:2023-12-02 04:59:33 24 4
gpt4 key购买 nike

我一直在尝试制作一个小程序,当用户按下某个键时打印消息,但是它不打印消息。以下是我的代码:

    public static void key() {
Main main = new Main();
JFrame frame = new JFrame();
JComponent component = frame.getRootPane();
frame.getContentPane().add(main);
System.out.println("adad");

Action test = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
System.out.println("w has been pressed");
}
};
component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_W, 0),"test");
component.getActionMap().put("test", test);

}

没有错误,但是当按下“w”键时,不会调用 actionPerformed。我究竟做错了什么?我不知道这是否相关,但这是主要方法,也许我在这里做错了什么。

    public static void main(String[] args) {

Main main = new Main();
JFrame frame = new JFrame();
frame.add(main);
frame.pack();
frame.setTitle("Test");
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLayout(new BorderLayout());
key();
frame.setVisible(true);
frame.add(frame, BorderLayout.CENTER);
}

最佳答案

您已经创建了第二个框架,该框架在屏幕上不可见,并且键绑定(bind)也已绑定(bind)...

正如我昨天所说,键绑定(bind)必须先注册到附加到可显示组件(附加到 native 对等组件)的组件,然后才能工作

如果您尝试使用更像...的东西

public static void key(JComponent component) {
Action test = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
System.out.println("w has been pressed");
}
};
component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_W, 0), "test");
component.getActionMap().put("test", test);

}

并从 public 传递 JFrame 实例或其子组件之一(例如 maincontentPane) static void main(...) 方法,它应该可以工作

关于java - 按键绑定(bind)不起作用 - swing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28422167/

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