【发布时间】:2020-09-28 15:32:17
【问题描述】:
我重新安排了我的问题,这样会更容易。
此代码应生成窗口,我需要按键盘时的控制台输出。 出现窗口,但我的 EventHandlers 不起作用。
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("JavaFX in Swing");
frame.setLayout(new BorderLayout());
Charts charts = new Charts();
frame.setSize(1024, 720); //Size of dispalayed window
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static class Charts extends JPanel implements KeyListener{
public Charts(){
addKeyListener(this);
}
@Override
public void keyTyped(java.awt.event.KeyEvent key) {
if(key.getKeyCode() == KeyEvent.VK_DOWN){
System.out.println("DOWN");
}
}
@Override
public void keyPressed(java.awt.event.KeyEvent key) {
if(key.getKeyCode() == KeyEvent.VK_DOWN){
System.out.println("DOWN");
}
}
@Override
public void keyReleased(java.awt.event.KeyEvent key) {
if(key.getKeyCode() == KeyEvent.VK_DOWN){
System.out.println("DOWN");
}
}
}
}
我做错了什么,这个 EventHandler 不起作用?
【问题讨论】:
-
完成有关事件处理的教程,将其应用到您的场景中,当卡住时返回 minimal reproducible example 以展示未按预期工作的内容。哦……不需要“喊”你认为重要的词:我们完全有能力掌握重要的东西:)
-
我编辑了我的问题。我希望现在好多了。我会很感激任何帮助
-
1.你实际上并没有用任何东西注册你的事件处理程序:即你需要做一些类似
something.setOnKeyPressed(keyEventHandler);的事情。 2. 键事件仅在它们注册的节点(或子节点)具有键盘焦点时才会触发,这对于JFXPanel或任何图表来说似乎都不太可能。使用封闭的JFrame注册 AWT 事件处理程序可能会更好。如果您想要完整的答案,您可能需要创建一个minimal reproducible example。 -
它必须是可重现的——就像 c&p-a-single-class-into-my-IDE-and-run 一样(你不希望我围绕你的问题编写你的样板代码,是吗 ;) 并且不要忘记导入,虽然它们通常很清楚,但它们可能会在组合 Swing/fx 应用程序中混淆
-
如果我没记错的话,你正在使用 swing。代码中似乎没有使用任何与 JavaFX 相关的内容(或文中提到的);重新标记问题。
标签: java swing graph keylistener eventhandler