我重新安排了我的问题,所以它将更容易。
这段代码应该生成Window,我需要在按下键盘时输出控制台.Window出现,但我的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不工作?
public static void main(String[] args) {
// there's no JavaFX in this example
JFrame frame = new JFrame("JavaFX in Swing");
frame.setLayout(new BorderLayout());
Charts charts = new Charts();
// add charts panel to frame to allow swing manage it in event processing
frame.setContentPane(charts);
frame.setSize(1024, 720); //Size of dispalayed window
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static class Charts extends JPanel {
public Charts(){
// Keylistener wont't work if there is no focused component (ie JTextField)
// JPanel is not focusable component
// So use registerKeyboardAction to handle events
registerKeyboardAction(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("DOWN press");
}
}, KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), WHEN_IN_FOCUSED_WINDOW);
registerKeyboardAction(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("DOWN release");
}
}, KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0, true), WHEN_IN_FOCUSED_WINDOW);
}
}