我有这些代码行,我想在添加乘客后禁用按钮。我想禁用按钮。 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.
}
});
}
答案 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);
:
这是基于您之前代码的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);
}
}
答案 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);