我有很多可以点击的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)
我的问题是我如何做动态变量名称,或者我的方法是错误的,我应该使用不同的模式。
答案 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
}
}