我正在开发一个需要GUI的项目,但我没有使用GUI的经验,所以我所做的一切都是猜测。 我有一个已经放入JList的对象的arraylist,现在我试图根据用户选择的内容更改标签中的文本。我收到一个错误,上面写着“不能引用在不同方法中定义的内部类中的非最终变量库”
我正在使用的arraylist中填充了可以从
调用字符串的对象如何让它发挥作用?
JList list = new JList(bookNames.toArray());
list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent event) {
typeLabel.setText(library.get(list.getSelectedIndex()).getType());
}
});
答案 0 :(得分:1)
您无法在新的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());
}
});
编辑: 此外,列表必须声明为final。
答案 1 :(得分:0)
对JList list
的引用必须为final
。
final JList list = new JList(...)
Java中的final
关键字有几个含义。当与变量或字段一起使用时,这意味着它总是引用相同的对象,即指针是常量。这并不意味着对象本身是不可更改的(或不可变的)。
对象的不变性以不同的方式实现 - 不要给我们任何改变对象内容的public
方法。例如String
和Date
总是不可变的
无论final
关键字如何。
final
的另一个例子:当在类前面使用时,它意味着一个类不能被子类化。