禁用匿名内部类中的按钮

时间:2011-06-12 09:53:00

标签: java class anonymous-inner-class

我有这些代码行,我想在添加乘客后禁用按钮。我想禁用按钮。 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.
        }
    });
}

4 个答案:

答案 0 :(得分:3)

因为当你这样做时:

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);
        }
    });
}

答案 1 :(得分:2)

一种方法是:

((JButton)ae.getSource()).setEnabled(false);

E.G。

这是基于您之前代码的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, lastName, 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);
    }
}

截图

enter image description here

答案 2 :(得分:1)

尝试将其导出为类字段,它应该以这种方式工作:

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, lastName, seatingID);//adding a passenger

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

答案 3 :(得分:0)

尝试seats[i].setEnabled(false);