我正在一个需要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());
    }
});


编辑:
同样,列表必须声明为最终的。

09-06 23:40