我有很多可以点击的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
}
}