如何让EvenHandler在JavaFX中正常工作?

问题描述 投票:-2回答:1

我重新安排了我的问题,所以它将更容易。

这段代码应该生成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不工作?

java swing graph keylistener eventhandler
1个回答
1
投票
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);
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.