java - 我不能同时使用 ActionListener 和 KeyListener

标签 java actionlistener keylistener

我想创建一个只有一个按钮的简单窗口。 当我按他时应该打印出“测试”,当我按 F5 时应该打印“F5”。 我不知道我做的不好 我为我还在学习的英语道歉

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;

@SuppressWarnings("serial")
public class Okienko extends JFrame implements ActionListener , KeyListener
{
    static Okienko frame;

    JButton bTest;

    public Okienko() 
    {
        setLayout(null);
        frame = this;
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setTitle("test");
        frame.setLocation(150, 150);
        frame.setSize(200, 400);


        bTest = new JButton("Test");
        bTest.setBounds(20, 50, 120, 20);
        frame.add(bTest);

        bTest.addActionListener(this);

        frame.addKeyListener(this);
        //frame.setFocusable(false);
        //frame.requestFocus();
        requestFocusInWindow();
        frame.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        Object source = e.getSource();

        if (source == bTest)
        {
            System.out.println("Test");
        } 
    }

    @Override
    public void keyPressed(KeyEvent e)
    {
        int id = e.getKeyCode();

        if (id == KeyEvent.VK_ESCAPE)
        {
            this.dispose();
        }

        if (id == KeyEvent.VK_F5)
        {
            System.out.println("F5");
        }

    }

    @Override
    public void keyReleased(KeyEvent e)
    {

    }

    @Override
    public void keyTyped(KeyEvent e)
    {

    }
    public static void main(String[] args)
    {
        new Okienko();
    }

}

最佳答案

例如,您可以通过调用组件的 setFocusable(true) 方法为组件启用键盘焦点。 在构造函数中添加:

   setFocusable(true);

更多信息在这里:https://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html

关于java - 我不能同时使用 ActionListener 和 KeyListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37409192/

相关文章:

Java命令行退出命令?

java - Corda 账户 - 账户和主机节点之间的交易

java - JSP页面只显示文件路径

Java Action 事件监听器中表达式的非法开始

java - ActionListener 在某些计算机上不起作用?

java - 如何在 KeyListener 中调用 Graphics 方法?

java - 如何在使用 Jackson 将 json 转换为 Java 对象时忽略 Map 相关的大括号

java - 无法安装黑莓应用程序

java - java如何知道使用什么索引

java - 如何通过 JOptionPane 捕获的用户输入将数据添加到 JList?