1

我现在正在创建一个 java Sudoku GUI 应用程序。

用于显示数独谜题的网格只是 myJButtons(实现 JButton)的二维数组 - 对于这个问题,它们可以被视为常规 JButtons。

该程序将允许单击网格中的按钮,调用动作侦听器。

有没有办法允许在单击按钮以允许按下数字时创建 KeyAdapter Keypress - 物理键 1、2、3、4、5、6、7、8、9、0

我希望动作侦听器仅在单击按钮时起作用。

一个更简单的示例是带有单个按钮的框架。当按下按钮时,用户可以按下键盘上的物理键,将 jbutton 文本设置为键值。除非先单击按钮,否则额外的按键不会更改按钮文本。

class ClickAction implements ActionListener { // Action Listener called when button is Pressed

    public void actionPerformed(ActionEvent ae) {

        //need a way to create a keyevent listener here

    }
}

提前感谢任何可以回答这个问题的人!

4

2 回答 2

2

我会使用另一种解决方案。您可以在应用程序启动期间注册按键侦听器,而不是每次单击按钮时创建 KeyEvent 侦听器。然后你可以使用一个标志来检查按钮是否被首先点击。仅当此标志为真时,您才在 KeyEvent 侦听器中执行操作。否则,您将跳过 KeyEvent 侦听器中的所有语句。

这里有一个例子:

public class TestClass {

    private boolean isButtonClicked = false;

    public void testYourButtons() {

        JButton myButton = new JButton();
        myButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                isButtonClicked = !isButtonClicked;
            }
        });

        myButton.addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent arg0) {
                // TODO Auto-generated method stub  
            }

            @Override
            public void keyReleased(KeyEvent arg0) {
                // TODO Auto-generated method stub
            }

            @Override
            public void keyPressed(KeyEvent arg0) {
                if (isButtonClicked) {
                    // TODO Do here your event handling
                    isButtonClicked = false;
                }
            }
        });

    }

}
于 2011-04-15T22:11:41.997 回答
0

正如我所发现的,您可以构建任何新事件,然后通过Component.processXxxEvent()

于 2011-04-15T22:14:03.697 回答