我正在一个需要GUI的项目中工作,但是我没有GUI的经验,所以我一直在做的一切在某种意义上都是猜测。
我创建了一个对象数组列表,并将其放入JList中,现在我试图根据用户的选择更改标签中的文本。我收到一条错误消息:“无法引用用其他方法定义的内部类中的非最终变量库”
我正在使用的arraylist填充有我可以从中调用字符串的对象
我该如何工作?
JList list = new JList(bookNames.toArray());
list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent event) {
typeLabel.setText(library.get(list.getSelectedIndex()).getType());
}
});
最佳答案
您无法在新的ListSelectionListener(){...}中访问typeLabel变量。
JList list = new JList(bookNames.toArray());
list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent event) {
// you cannot access typeLabel here
typeLabel.setText(library.get(list.getSelectedIndex()).getType());
}
});
快速解决方案是将typeLabel声明为final。
这意味着您不能将另一个值重新分配给typeLabel,但这可能很好。
final typeLabel = whatever; // add the final modifier
final JList list = new JList(bookNames.toArray());
list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent event) {
typeLabel.setText(library.get(list.getSelectedIndex()).getType());
}
});
编辑:
同样,列表必须声明为最终的。