Java 将多个按钮设置为禁用

Java 将多个按钮设置为禁用,java,swing,Java,Swing,我试图让它这样当用户点击一个按钮,它将成为禁用。我使用了以下代码来实现这一点: final JButton die1 = new JButton(theModel.letters.get(0)); die1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent btn1){ d

我试图让它这样当用户点击一个按钮,它将成为禁用。我使用了以下代码来实现这一点:

            final JButton die1 = new JButton(theModel.letters.get(0));
            die1.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent btn1){
                   die1.setEnabled(false);
               }
            });
            boggleGrid.add(die1);
model.letters.get(0)是一个字符串值,可以有效地工作。我的问题是,当我试图对同一boggleGrid JPanel中的其他按钮使用相同的代码时。我认为这可能与“final”语句有关,但是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);

背景:我正在做一个令人困惑的游戏(如果有帮助的话)。谢谢

您在同一个
JButton
上多次调用
addActionListener
,例如:

final JButton die4 = new JButton(theModel.letters.get(3));
die1.addActionListener(new ActionListener() {
您正在创建一个名为
die4
的按钮,然后将
ActionListener
添加到
die1
。在本例中,您希望对
addActionListener
的调用发生在
die4

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);
JPanel-boggleGrid=newjpanel(newgridlayout(4,4));
ActionListener disableButtonListener=新建ActionListener(){
@凌驾
已执行的公共无效操作(操作事件)
{
//getSource()将返回对该控件的引用
//触发了事件。在本例中,是一个JButton。我们保护它
//不过,为了以防万一,我们必须避免类卡斯特例外。
if(!(event.getSource()instanceof JButton)){
返回;
}
((JButton)event.getSource()).setEnabled(false);
}
};
随机字母()模型;
对于(int i=0;i<16;i++){
jbuttonbutton=newjbutton(model.letters.get(i));
addActionListener(disableButtonListener);
boggleGrid.add(按钮);
}
frame.add(boggleGrid,BorderLayout.CENTER);

您在同一个
JButton
上多次调用
addActionListener
,例如:

final JButton die4 = new JButton(theModel.letters.get(3));
die1.addActionListener(new ActionListener() {
您正在创建一个名为
die4
的按钮,然后将
ActionListener
添加到
die1
。在本例中,您希望对
addActionListener
的调用发生在
die4

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);
JPanel-boggleGrid=newjpanel(newgridlayout(4,4));
ActionListener disableButtonListener=新建ActionListener(){
@凌驾
已执行的公共无效操作(操作事件)
{
//getSource()将返回对该控件的引用
//触发了事件。在本例中,是一个JButton。我们保护它
//不过,为了以防万一,我们必须避免类卡斯特例外。
if(!(event.getSource()instanceof JButton)){
返回;
}
((JButton)event.getSource()).setEnabled(false);
}
};
随机字母()模型;
对于(int i=0;i<16;i++){
jbuttonbutton=newjbutton(model.letters.get(i));
addActionListener(disableButtonListener);
boggleGrid.add(按钮);
}
frame.add(boggleGrid,BorderLayout.CENTER);

我尝试了一个基本循环,唯一的问题是命名循环中的按钮。不过,我会考虑使用数组,干杯。我用一个基本循环尝试过,唯一的问题是命名循环中的按钮。不过我会考虑使用数组,干杯。你会如何更改它们?我想为每个新按钮更改
(ActionEvent btn#)
会有这种效果吗?如果没有,怎么做?@SemicolonCapitalD ActionEvent的名称无关紧要,您必须执行
die5.addActionListener(新ActionListener(){
,例如die5.Swing操作为什么在官方APIsHow中实施?您会更改它们吗?我想更改
(ActionEvent btn#)
对于每个新按钮都会有这种效果?如果没有,如何?@分号。ActionEvent的名称无关紧要,您必须执行
die5.addActionListener(例如,对于die5.addActionListener(){
。Swing操作在官方API中实现的原因