我认为有一种比从JPanel中删除每个元素并重新制作它们更好的方法,因为这是我的解决方法,但现在很明显,当点击按钮时,它会被告知要删除它以便动作永远不会完成。
这是我添加按钮动作监听器的糟糕代码:
// Add action listener to increment quest progress when button is pushed
listOfButtons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
questList[temp].incrementNumerator(1);
refreshButtons();
}
});
这是我刷新JButtons的糟糕代码:
// Use when updating data that a JButton displays, destroys & recreates all JButtons on the window
private void refreshButtons() {
for (int i = 0; i < listOfButtons.length; i++) {
// Remove each JButtons from the JFrame
contentPane.remove(listOfButtons[i]);
}
addButtons();
}
答案 0 :(得分:2)
您可以从JButton
本身获取ActionEvent
引用。
listOfButtons[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
questList[temp].incrementNumerator(1);
((JButton) e.getSource()).setText(questList[temp].getValue());
}
});
我以questList[temp].getValue()
为例。你显然会传递适用于你的程序的内容。