为什么我的 KeyPressed 事件随机停止工作?

问题描述

我是 Java 新手,正在尝试通过制作一个简单的应用程序来学习 GUI 基础知识。
我的应用程序只是一个简单的按钮,单击时将其名称更改为单击次数.

我希望能够在用户按下“r”键时重置计数器/按钮名称,但由于某种原因,它只能在单击按钮之前起作用。
计数器超过零后,不再检测到按键。

我已经尝试了所有可以在互联网上找到的东西,包括

  • 多个不同的密钥侦听器
  • frame.setFocusable(true);
  • YouTube 教程
  • 现有的 Stack Overflow 帖子(似乎没有一个与此问题相符)
  • 调试(未显示任何错误

我无法弄清楚发生了什么。如果有人可以提供帮助,将不胜感激。我的代码如下。 (我不知道是哪一部分导致了问题,所以我不能让它太短,否则我可能会剪掉一些重要的东西。它只有 90 行。)

import java.awt.AWTException;
import java.awt.BorderLayout;
import javax.swing.*;
import java.awt.event.*;

public class Clicker implements ActionListener {
    JMenu m1;
    JMenuItem m11;
    JMenuItem m22;
    JButton button;
    int counter = 0;
    
    public Clicker() throws AWTException {
        JFrame frame = new JFrame("Click Counter");
        frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300,300);
        
        JMenuBar mb = new JMenuBar();
        JMenu m1 = new JMenu("File");
        mb.add(m1);
        m11 = new JMenuItem("Reset");
        m22= new JMenuItem("Quit");
        m1.add(m11);
        m1.add(m22);
        button = new JButton("Click");

        frame.getContentPane().add(BorderLayout.CENTER,button);
        frame.getContentPane().add(BorderLayout.norTH,mb);
        frame.setVisible(true);
        frame.setFocusable(true);
        
        m22.setToolTipText("⌘Q");
        m11.setToolTipText("R");
        
        button.addActionListener(this);
        m11.addActionListener(this);
        m22.addActionListener(this);
        
        frame.addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent e) {
                //nothing
                
            }

            @Override
            public void keypressed(KeyEvent e) {
                int keycode = e.getKeyCode();
                switch(keycode) {
                    case KeyEvent.VK_R:
                        System.out.println("R pressed");
                        counter = 0;    
                        button.setText("Clicks: " + counter);
                        break;
                }
            }

            @Override
            public void keyreleased(KeyEvent e) {
                //nothing
                
            }
            
        });
        
    }

    public static void main(String[] args) throws AWTException {
        new Clicker();
    }

    public void actionPerformed(ActionEvent evt) {
        if (evt.getSource()==button) {
            counter++;  
            button.setText("Clicks: " + counter);
        }
        else if (evt.getSource()==m11) {
            counter = 0;    
            button.setText("Clicks: " + counter);
        }
        else if (evt.getSource()==m22) {
            System.exit(0);
        }
        
    }

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)