禁用匿名内部类内部的按钮

问题描述

| 我有这些代码行,我想在添加乘客后禁用按钮。我想禁用该按钮。
seats[i].setEnabled(false)
不起作用,因为它在匿名内部类中。
JButton [] seats = new JButton [40]; //creating a pointer to the buttonsArray
for (int i = 0; i < 40; i++)
{
    seats[i] = new JButton();//creating the buttons
    seats[i].setPreferredSize(new Dimension(50,25));//button width
    panel4seating.add(seats[i]);//adding the buttons to the panels
    final int seatingID = i;  // Create a local final variable so it can be passed to the anonymous innerClass...

    seats[i].addActionListener(new ActionListener()
    {  //anonymous inner class
        public void actionPerformed(ActionEvent evt)
        {  
            String firstName = showInputDialog();
            String lastName = showInputDialog();

            sw101.AddPassenger(firstName,lastName,seatingID);//adding a pasenger

            //I want to add a line here that disables the button.
        }
    });
}
    

解决方法

        因为当您这样做:
setEnabled(false);
在匿名内部类中,您正在
ActionListener
实例上调用该方法。不是JButton。 尝试这个:
JButton [] seats = new JButton[40];

for (int i = 0; i < 40; i++)
{
    final JButton seat = new JButton();
    final int seatingID = i;

    seats[i] = seat;
    seat.setPreferredSize(new Dimension(50,25));
    panel4seating.add(seat);

    seat.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent evt)
        {  
            String firstName = showInputDialog();
            String lastName = showInputDialog();

            sw101.AddPassenger(firstName,lastName,seatingID);

            seat.setEnabled(false);
        }
    });
}
    ,        一种方法是:
((JButton)ae.getSource()).setEnabled(false);
: 例如。 这是基于您之前的代码的SSCCE。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class GuiCreator extends JFrame
{
    public GuiCreator()
    {
        super(\"Seats\");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Container contentPane = getContentPane();
        contentPane.add(new SeatingPanel());

        pack();

        setVisible(true);
    }

    public static void main(String[] args) {
        new GuiCreator();
    }
}

class SeatListener implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent ae) {
        //String firstName = showInputDialog();
        //String lastName = showInputDialog();

        //sw101.AddPassenger(firstName,seatingID);//adding a passenger
        ((JButton)ae.getSource()).setEnabled(false);
    }

    public String showInputDialog() {
        return JOptionPane.showInputDialog(null,\"Enter Data\");
    }
}

class SeatingPanel extends JPanel
{
    public SeatingPanel()
    {
        super(new BorderLayout());

        JPanel panel4seating = new JPanel();//creating a grid panel
        panel4seating.setLayout(new GridLayout(4,10));//setting the layout of the grid panel

        JButton [] seats = new JButton [40]; //creating a pointer to the buttonsArray
        ActionListener listener = new SeatListener();
        for (int i = 0; i < 40; i++)
        {
            seats[i] = new JButton();//creating the buttons
            //better to set the preferred size of the button
            seats[i].setPreferredSize(new Dimension(50,25));
            panel4seating.add(seats[i]);
            seats[i].addActionListener(listener);
        }

        add(panel4seating,BorderLayout.CENTER);
    }
}
屏幕截图     ,        尝试将其导出为类字段,它应该以这种方式工作:
public class Whatever {

private JButton [] seats;
private function whastsUpDude() {
seats = new JButton [40]; //creating a pointer to the buttonsArray
        for (int i = 0; i < 40; i++)
        {
            seats[i] = new JButton();//creating the buttons
            seats[i].setPreferredSize(new Dimension(50,25));//button width
            panel4seating.add(seats[i]);//adding the buttons to the panels
            final int seatingID = i;  // Create a local final variable so it can be passed to the anonymous innerClass...

            seats[i].addActionListener(new ActionListener()
             {  //anonymous inner class
                public void actionPerformed(ActionEvent evt)
                {  
                    String firstName = showInputDialog();
                    String lastName = showInputDialog();

                    sw101.AddPassenger(firstName,seatingID);//adding a passenger

                    //I want to add a line here that disables the button.
                }
             });
}
    ,        试试
seats[i].setEnabled(false);
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...