我的代码中有一个异常:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at darren.choose$1.actionPerformed(choose.java:30)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
像这样的代码,请帮助我:
public class choose extends JFrame {
JList<String> jl1;
JList<String> jl2;
JButton jb1;
private static String[] food = {"bacon", "apple", "dumpline", "egg", "rice"};
public choose() {
super("JFrame title");
setLayout(new FlowLayout());
jl1 = new JList<String>(food);
jl1.setVisibleRowCount(3);
jl1.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
add(new JScrollPane(jl1));
jb1 = new JButton("move to -->");
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jl2.setListData((String[]) jl1.getSelectedValues());
}
});
add(jb1);
jl2 = new JList<String>();
jl2.setVisibleRowCount(3);
jl2.setFixedCellHeight(15);
jl2.setFixedCellWidth(100);
jl2.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
add(new JScrollPane(jl2));
}
}
最佳答案
第一:public Object[] JList.getSelectedValues()
自 Java 1.7 起已弃用。
在其实际实现中,它返回一个对象数组实例:
@Deprecated
public Object[] getSelectedValues() {
ListSelectionModel sm = getSelectionModel();
ListModel<E> dm = getModel();
int iMin = sm.getMinSelectionIndex();
int iMax = sm.getMaxSelectionIndex();
if ((iMin < 0) || (iMax < 0)) {
return new Object[0];
}
Object[] rvTmp = new Object[1+ (iMax - iMin)];
int n = 0;
for(int i = iMin; i <= iMax; i++) {
if (sm.isSelectedIndex(i)) {
rvTmp[n++] = dm.getElementAt(i);
}
}
Object[] rv = new Object[n];
System.arraycopy(rvTmp, 0, rv, 0, n);
return rv;
}
所以这沮丧成String[]
只能失败:
jl2.setListData((String[]) jl1.getSelectedValues());
相反,您应该使用 List<E> JList.getSelectedValuesList()
返回 List<E>
哪里E
是 JList
中指定的通用名称变量声明。
所以你可以这样做:
JList<String> jl1 = new JList<>() ;
JList<String> jl2 = new JList<>() ;
...
List<String> jl1Values = jl1.getSelectedValuesList();
jl2.setListData(jl1Values.toArray(new String[jl1Values.size()]));
关于java - 将一个 JList 中的字符串移动到另一个 JList 时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48239978/