Java 如何将非final变量传递给匿名内部类?
我有这些代码行。我知道您不能将非final变量传递给内部类,但我需要将变量Java 如何将非final变量传递给匿名内部类?,java,inner-classes,anonymous-inner-class,Java,Inner Classes,Anonymous Inner Class,我有这些代码行。我知道您不能将非final变量传递给内部类,但我需要将变量I传递给匿名内部类以用作seatingID。你能提出这样做的方法吗 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].se
I
传递给匿名内部类以用作seatingID。你能提出这样做的方法吗
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
seats[i].addActionListener(new ActionListener()
{ //anonymous inner class
public void actionPerformed(ActionEvent evt)
{
String firstName = (String)JOptionPane.showInputDialog("Enter First Name");
String lastName = (String)JOptionPane.showInputDialog("Enter Last Name");
sw101.AddPassenger(firstName, lastName, seatingID);
}
});
}
JButton[]座位=新JButton[40]//创建指向按钮阵列的指针
对于(int i=0;i<40;i++)
{
seats[i]=newjbutton();//创建按钮
座椅[i].setPreferredSize(新尺寸(50,25));//按钮宽度
panel4seating.add(seats[i]);//将按钮添加到面板
seats[i].addActionListener(新ActionListener()
{//匿名内部类
已执行的公共无效操作(操作事件evt)
{
String firstName=(String)JOptionPane.showInputDialog(“输入名字”);
String lastName=(String)JOptionPane.showInputDialog(“输入姓氏”);
sw101.添加乘客(名、姓、座位号);
}
});
}
您不能直接创建ActionListener,但可以创建ActionListener的(静态私有)子类,该子类在其构造函数中使用seatingID
然后而不是
seats[i].addActionListener(new ActionListener() { ... });
你会的
seats[i].addActionListener(new MySpecialActionListener(i));
[编辑]实际上,你的代码还有很多其他错误,我不确定这个建议是否正确。如何呈现可编译的代码。简单的方法是创建一个局部final变量,并用循环变量的值初始化它;e、 g
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 ii = i; // Create a local final variable ...
seats[i].addActionListener(new ActionListener()
{ //anonymous inner class
public void actionPerformed(ActionEvent evt)
{
String firstName = (String)JOptionPane.showInputDialog("Enter First Name");
String lastName = (String)JOptionPane.showInputDialog("Enter Last Name");
sw101.AddPassenger(firstName, lastName, ii);
}
});
}
JButton[]座位=新JButton[40]//创建指向按钮阵列的指针
对于(int i=0;i<40;i++)
{
seats[i]=newjbutton();//创建按钮
座椅[i].setPreferredSize(新尺寸(50,25));//按钮宽度
panel4seating.add(seats[i]);//将按钮添加到面板
final int ii=i;//创建一个局部final变量。。。
seats[i].addActionListener(新ActionListener()
{//匿名内部类
已执行的公共无效操作(操作事件evt)
{
String firstName=(String)JOptionPane.showInputDialog(“输入名字”);
String lastName=(String)JOptionPane.showInputDialog(“输入姓氏”);
sw101.AddPassenger(名字、姓氏、ii);
}
});
}
哪个部分?我不太会荡秋千。这只是程序的一部分。sw101不在任何地方声明,seatingID不在任何地方声明,当用户多次点击按钮时会发生什么?请参阅我对主要问题的评论。sw101是一个飞行对象,它被声明在某个地方,我的问题是找到一种传递变量i的方法。如果您提供演示错误的最少可编译代码,您将得到更好的答案。你是说在上面的代码中有seatingID的“i”吗?实际上没有bug,我试图找到一种方法将变量i从for循环传递到内部类,这样我就可以将它指定为seatingID+1是的,这也是我提出的。(只是我会把它命名为seatingID
,而不是ii
)