我想根据其内容集中JTextField的内容。
for(int i=0; i<10; i++){
txtFields[i] = new JTextField(20);
txtFields[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
txtFields[i].setHorizontalAlignment(JTextField.CENTER);
}
});
}
我收到错误,我无法在内部类中访问本地变量。
答案 0 :(得分:4)
这是因为变量i
在调用actionPerformed的范围内不可用。一个简单的解决方法是在for循环的范围中声明一个final变量:
for (int i = 0; i < 10; i++) {
final JTextField currentField = new JTextField(20);
txtFields[i] = currentField;
txtFields[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
currentField.setHorizontalAlignment(JTextField.CENTER);
}
});
}
或者:
for (int i = 0; i < 10; i++) {
txtFields[i] = new JTextField(20);
txtFields[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
((JTextField) e.getSource()).setHorizontalAlignment(JTextField.CENTER);
}
});
}
就个人而言,我建议您创建一个ActionListener子类,在其构造函数中接受JTextField。这是一种更清洁的方法,有助于减少您遇到的混淆缺陷。
答案 1 :(得分:1)
在“addActionListener”语句之前写入“final int j = i;”,然后在内部类中使用“j”。
答案 2 :(得分:1)
为什么选择ActionListener?也许我误解了你的要求,但这不会做你想要的:
for (int i=0; i<10; i++)
{
txtFields[i] = new JTextField(20);
txtFields[i].setHorizontalAlignment(JTextField.CENTER);
}