我不能同时使用ActionListener和KeyListener

时间:2016-05-24 09:16:04

标签: 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();
    }

}

2 个答案:

答案 0 :(得分:0)

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

   setFocusable(true);

此处有更多信息:https://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html

答案 1 :(得分:0)

添加

  

btest.setFocusable(false);