许多jbutton具有相同的onkeypress功能



我有很多可以点击的jbutton(大约50多个)。

单击一个后,程序将检查按键输入,并将按钮文本设置为按下的按键。

我想在每个事件中使用一个函数,而不是将50个代码块复制粘贴到一个按钮的每个onkeypressed和onclick事件。

到目前为止我的代码(减少):

private JButton attackMoveBtn = new JButton();
private boolean isAlreadyClicked = false;
    private void attackMoveBtnKeyPressed(java.awt.event.KeyEvent evt) {                                         
        if(attackMoveBtn.getText().equals(Strings.setHotkey)){
            isAlreadyClicked = false;
            attackMoveBtn.setText(String.valueOf(evt.getKeyChar()));
        }
    }                                        
    private void attackMoveBtnMouseClicked(java.awt.event.MouseEvent evt) {                                           
        if(evt.getButton() == 3){
            isAlreadyClicked = false;
            attackMoveBtn.setText("");
        }else{
            if(!isAlreadyClicked){
                isAlreadyClicked = true;
                attackMoveBtn.setText(Strings.setHotkey);
            }else{
                isAlreadyClicked = false;
                attackMoveBtn.setText("Mouse "+evt.getButton());
            }
        }
    }

下一个按钮唯一会改变的是JButton本身(例如,attakMoveBtn将变成moveBtn

我尝试使用String compName = evt.getComponent().getName();来检索我按下的按钮的名称,但我不能使用"attackMoveBtn".setText(),因为java并不真正支持动态var名称。

有没有办法知道按下了哪个按钮?然后我可以用buttonObject作为参数调用一个函数,比如myOnKeyPressFunction(JButton myButton)

我的问题是如何创建动态变量名,或者我的方法是否错误,应该使用不同的模式。

"有办法知道按下了哪个按钮吗?然后我可以用buttonObject作为参数调用一个函数,比如myOnKeyPressFunction(JButton myButton)"

只需使用返回Object的事件的getSource并将JButton强制转换为

JButton button = (JButton)evt.getSource();
myOnKeyPressFunction(button);

Fyi,按钮将与ActionListener一起使用。如果您使用GUI编辑器工具,当在设计视图中右键单击按钮时,选择event->action->actionPerformed,将为您添加一个ActionListener


"我正在使用netbeans图形编辑器来构建我的gui(我在gui编程方面很差劲,tbh)"

我强烈建议您放弃构建器工具,先学习一些教程,然后学习如何编写代码。通过Swing创建GUI。

如果它只是使用ActionListener 的JButtons

public void actionPerformed(ActionEvent e){
    JButton temp = (JButton)e.getSource();
    //do whatever with temp
}

如果您将ActionListener与其他对象共享

public void actionPerformed(ActionEvent e){
    if(e.getSource() instanceof JButton){
        JButton temp = (JButton)e.getSource();
        //do whatever with temp
    }
}

最新更新