许多jbuttons具有相同的onkeypress功能

时间:2014-04-13 17:59:20

标签: java jbutton

我有很多可以点击的jbuttons(大约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本身( attackMoveBtn 会变成 moveBtn

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

有没有办法获得按下哪个按钮?然后,我可以使用buttonObject作为参数调用函数,如myOnKeyPressFunction(JButton myButton)

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

2 个答案:

答案 0 :(得分:1)

  

“有没有办法获得按下哪个按钮?然后我可以使用buttonObject作为参数调用函数,如myOnKeyPressFunction(JButton myButton)”

只需使用返回getSource并将Object投射到其中的事件的JButton

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

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


  

“我正在使用netbeans图形编辑器构建我的gui(我很喜欢gui编程tbh)”

我强烈建议您放弃构建器工具并阅读一些教程并学习先编写代码。浏览Creating GUIs with Swing

答案 1 :(得分:1)

如果它只是JButtons使用ActionListener

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
    }
}