Java jList与ArrayList?
我正在做一个需要GUI的项目,但我没有GUI方面的经验,所以我所做的一切在某种意义上都是猜测。 我已经创建了一个对象的arraylist,并将其放入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
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)