场景:我有一系列jbuttons(在运行时创建),每个jbuttons都在他的标签中有一个数字。使用以下代码创建按钮:
for (int i = 1; i <= tablesNumber; i++) {
JButton button = new JButton(Integer.toString(i));
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new Orders().setVisible(true);
}
});
jPanel1.add(button);
}
我需要传递给班级订购触发事件的按钮的编号,例如如果用户点击第5号按钮,我需要将值5传递给订单。 我怎样才能做到这一点? 感谢。
答案 0 :(得分:1)
从你的问题:
传递给班级订购触发事件的按钮号码
您可以捕获循环迭代变量i
,以便可以在匿名事件处理程序中使用它。为了论证,我假设您想将数字传递给构造函数,但是您可以随意使用它:
for (int i = 1; i <= tablesNumber; i++) {
final int t = i; // <-- NEW LINE HERE
JButton button = new JButton(Integer.toString(i));
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new Orders(t).setVisible(true); // <-- USE t here however you need to
}
});
jPanel1.add(button);
}
如果没有final int t = i
,您可能会遇到编译器错误“无法引用在不同方法中定义的内部类中的非最终变量”。这是因为捕获变量(即来自匿名类'方法中使用的外部作用域的变量必须是final
(或者实际上是最终的 - 从SE 8开始,这种行为略有改变)。