我正在学习一系列Java教程以尝试学习它。我对教程72有疑问。
链接:http://www.youtube.com/watch?v=9z_8yEv7nIc&feature=relmfu
在视频的7:02,写下了这个陈述。但是,此方法已在Java 1.7中弃用。
RightList.setListData(LeftList.getSelectedValues());
Eclipse返回以下错误:
Object[] javax.swing.JList.getSelectedValues()
getSelectedValues
@Deprecated
public Object[] getSelectedValues()
Deprecated. As of JDK 1.7, replaced by getSelectedValuesList()
Returns an array of all the selected values, in increasing order based on their indices in the list.
Returns:
the selected values, or an empty array if nothing is selected
See Also:
isSelectedIndex(int), getModel(), addListSelectionListener(javax.swing.event.ListSelectionListener)
但是这会返回一个错误,上面写着'方法setListData(Object[]) in the type JList is not applicable for the arguments (List)'
。
更换上述声明的正确方法是什么?
另外,我想借此机会提出另一个不相关的问题。最好在方法之外初始化变量,如下所示:
private JList LeftList = new JList();
private JList RightList = new JList();
private JButton Move = new JButton("Move -->");
private static String[] Items = {"Item 1", "Item 2","Item 3","Item 4","Item 5"};
与(如视频中所示)相比:如上所述在类外声明变量,但在方法内为它们赋值?
是否表现更好?
答案 0 :(得分:9)
根据Java7的JList
javadoc,我发现你确实没有选择 - 两个API(getSelectedValuesList
和setDataList
)是无关的。
要解决这个问题,一个简单的解决方案是执行LeftList.getSelectedValuesList().toArray()
- 它将为您提供适合setDataList
的数组。免责声明:我不知道这是否是Java推荐的“正确”用法,但它应该有效。
另外,请注意,弃用的API并不意味着它不起作用 - 如果您觉得现在不想花时间,您仍然可以使用旧的API(就像您正在做的那样)一个教程,而不是一些将在未来10年投入生产的正在进行的产品)
关于第二个问题 - 这是一个品味问题,我更喜欢声明变量而不在类声明中初始化它们并在构造函数中使用值设置它们。习惯上给常量提供初始值(例如public static final String AAA = "XYZ";
)
答案 1 :(得分:3)
您需要更新setListData
方法以获取新参数类型(以及任何其他期望Object[]
的代码,包括方法,迭代数组的可能事物等。 )只是因为某些东西被弃用并不意味着它被删除。
做什么取决于您的直接目标:是学习材料,还是学习材料和更新所有要编译的资源而不发出警告。
答案 2 :(得分:2)
我查看了有问题的教程。
有关API的问题,您需要执行以下操作:
rightList.setListData(leftList.getSelectedValuesList().toArray());
PS:关于风格的一些提示。在Java中,变量通常以小写字母开头,类名以大写字母开头。在上面的代码中,它在我看来你试图在类上调用静态方法,因此你可能想要将名称更改为小写。