我正在尝试做到这一点,以便当用户单击按钮时它将被禁用。我使用以下代码来实现此目的:
final JButton die1 = new JButton(theModel.letters.get(0));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn1){
die1.setEnabled(false);
}
});
boggleGrid.add(die1);
theModel.letters.get(0) 是一个字符串值并且有效。我的问题是,当我尝试对同一 boggleGrid JPanel 中的其他按钮使用相同的代码时。我认为这可能与“最终”声明有关,但是 actionListener 必须发挥作用。这是我的其余代码:
JPanel boggleGrid = new JPanel(new GridLayout(4,4));
theModel.randomLetters();
final JButton die1 = new JButton(theModel.letters.get(0));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn1){
die1.setEnabled(false);
}
});
boggleGrid.add(die1);
final JButton die2 = new JButton(theModel.letters.get(1));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn2){
die2.setEnabled(false);
}
});
boggleGrid.add(die2);
final JButton die3 = new JButton(theModel.letters.get(2));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn3){
die3.setEnabled(false);
}
});
boggleGrid.add(die3);
final JButton die4 = new JButton(theModel.letters.get(3));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn4){
die4.setEnabled(false);
}
});
boggleGrid.add(die4);
final JButton die5 = new JButton(theModel.letters.get(4));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn5){
die5.setEnabled(false);
}
});
boggleGrid.add(die5);
final JButton die6 = new JButton(theModel.letters.get(5));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn6){
die6.setEnabled(false);
}
});
boggleGrid.add(die6);
final JButton die7 = new JButton(theModel.letters.get(6));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn7){
die7.setEnabled(false);
}
});
boggleGrid.add(die7);
final JButton die8 = new JButton(theModel.letters.get(7));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn8){
die8.setEnabled(false);
}
});
boggleGrid.add(die8);
final JButton die9 = new JButton(theModel.letters.get(8));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn9){
die9.setEnabled(false);
}
});
boggleGrid.add(die9);
final JButton die10 = new JButton(theModel.letters.get(9));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn10){
die10.setEnabled(false);
}
});
boggleGrid.add(die10);
final JButton die11 = new JButton(theModel.letters.get(10));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn11){
die11.setEnabled(false);
}
});
boggleGrid.add(die11);
final JButton die12 = new JButton(theModel.letters.get(11));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn12){
die12.setEnabled(false);
}
});
boggleGrid.add(die12);
final JButton die13 = new JButton(theModel.letters.get(12));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn13){
die13.setEnabled(false);
}
});
boggleGrid.add(die13);
final JButton die14 = new JButton(theModel.letters.get(13));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn14){
die14.setEnabled(false);
}
});
boggleGrid.add(die14);
JButton die15 = new JButton(theModel.letters.get(14));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn15){
die15.setEnabled(false);
}
});
boggleGrid.add(die15);
JButton die16 = new JButton(theModel.letters.get(15));
die1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent btn16){
die16.setEnabled(false);
}
});
boggleGrid.add(die16);
frame.add(boggleGrid, BorderLayout.CENTER);
上下文:我正在制作一个 Boggle 游戏(如果有帮助的话)。谢谢
最佳答案
您在同一个 JButton
上多次调用 addActionListener
,例如:
final JButton die4 = new JButton(theModel.letters.get(3));
die1.addActionListener(new ActionListener() {
您正在创建一个名为 die4
的按钮,然后向 die1
添加一个 ActionListener
。在本例中,您希望在 die4
上调用 addActionListener
。
final JButton die4 = new JButton(theModel.letters.get(3));
die4.addActionListener(new ActionListener() {
^^^^
这是您的代码的实现,它更简洁,并且可能更易于维护:
JPanel boggleGrid = new JPanel(new GridLayout(4, 4));
ActionListener disableButtonListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent event)
{
// event.getSource() will return a reference to the control that
// fired the event. In this case, a JButton. We protect
// ourselves from a ClassCastException just in case though.
if (!(event.getSource() instanceof JButton)) {
return;
}
((JButton) event.getSource()).setEnabled(false);
}
};
theModel.randomLetters();
for (int i = 0; i < 16; i++) {
JButton button = new JButton(theModel.letters.get(i));
button.addActionListener(disableButtonListener);
boggleGrid.add(button);
}
frame.add(boggleGrid, BorderLayout.CENTER);
关于java - 将多个按钮设置为禁用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32214944/