Java jList与ArrayList?

Java jList与ArrayList?,java,arrays,swing,listener,jlist,Java,Arrays,Swing,Listener,Jlist,我正在做一个需要GUI的项目,但我没有GUI方面的经验,所以我所做的一切在某种意义上都是猜测。 我已经创建了一个对象的arraylist,并将其放入JList中,现在我正试图根据用户的选择更改标签中的文本。我得到一个错误,它说“不能引用在不同方法中定义的内部类中的非最终变量库” 我使用的arraylist中填充了我可以从中调用字符串的对象 我怎样才能让它工作 JList list = new JList(bookNames.toArray()); list.addListSelectionLi

我正在做一个需要GUI的项目,但我没有GUI方面的经验,所以我所做的一切在某种意义上都是猜测。 我已经创建了一个对象的arraylist,并将其放入JList中,现在我正试图根据用户的选择更改标签中的文本。我得到一个错误,它说“不能引用在不同方法中定义的内部类中的非最终变量库”

我使用的arraylist中填充了我可以从中调用字符串的对象

我怎样才能让它工作

JList list = new JList(bookNames.toArray());

list.addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent event) {
        typeLabel.setText(library.get(list.getSelectedIndex()).getType());
    }
});

JList列表的引用必须是
final

final JList list = new JList(...)
Java中的
final
关键字有多种含义。当与变量或字段一起使用时,这意味着它总是引用同一个对象,即指针是常量。这并不意味着对象本身是不可更改的(或不可变的)

对象的不变性是以另一种方式实现的——不要给我们任何
public
方法来更改对象的内容。例如,
String
s和
Date
s总是不可变的 不考虑
final
关键字


final
的另一个示例:当在类前面使用时,意味着类不能被子类化。

JList
的引用必须是
final

final JList list = new JList(...)
Java中的
final
关键字有多种含义。当与变量或字段一起使用时,这意味着它总是引用同一个对象,即指针是常量。这并不意味着对象本身是不可更改的(或不可变的)

对象的不变性是以另一种方式实现的——不要给我们任何
public
方法来更改对象的内容。例如,
String
s和
Date
s总是不可变的 不考虑
final
关键字


final
的另一个示例:当在类前面使用时,意味着类不能被子类化。

您不能访问新ListSelectionListener()中的typeLabel变量{…}

一个快速解决方法是将typeLabel声明为最终版本。 这意味着您不能将另一个值重新分配给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());
    }
});
编辑:
此外,列表必须声明为最终列表。

您无法访问新ListSelectionListener()中的typeLabel变量。{…}

一个快速解决方法是将typeLabel声明为最终版本。 这意味着您不能将另一个值重新分配给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());
    }
});
编辑:
此外,列表必须声明为最终值。

如果必须声明为最终值,那么如何使我的arraylist正确填充?列表的内容仍然可以更改,即使它声明为“最终”-您只是无法为“list”变量指定另一个值“如果它必须为最终值,那么如何使我的arraylist正确填充?”我们可以更好地回答这个问题,如果你发布了这个项目中涉及的所有代码。谢谢各位,我记下来了!现在只需复制我的代码几次,这是一个半完整的项目!如果必须是final,那么如何使我的arraylist正确填充?列表的内容仍然可以更改,即使声明为“final”-您不能为“list”变量指定另一个值“如果必须是final,那么如何使我的arraylist正确填充?”我们可以更好地回答这个问题,如果你发布了这个项目中涉及的所有代码。谢谢各位,我记下来了!现在只需复制我的代码几次,这是一个半完整的项目!不幸的是
java.util.Date
是可变的,请参阅
setTime(long)
不幸的是
java.util.Date
是可变的,请参阅
setTime(long)