我创建了一个列表和一个带有自定义对象的模型。我想检索列表中的对象,但是,我收到一条错误消息,提示无法将String转换为Object。
String cannot be converted to ARMAJTermek
Swing自动创建JList,然后向其中添加一个新模型。
DefaultListModel model = new DefaultListModel<ARMAJTermek>();
TermekList.setModel(model);
我需要这个,因为我正在使用一个自定义对象,该对象具有属性和方法,稍后需要调用它们。为此,我覆盖了.toString方法,如下所示:
@Override
public String toString () {
String toString = "";
toString = this.nev+"\n"+this.cikkszam+"\n"+Integer.toString(this.bruttoKisker)+" Ft";
return toString;
}
这样,当我将一个对象添加到JList时,该对象将按照单元格渲染器的设计显示(这也是唯一的,将JTextArea显示为列表元素...)。
for (int i... and lots of other code) {
model.addElement(termek[i]);
}
TermekList.setModel(model);
TermekList.revalidate();
TermekList.repaint();
在将对象添加到列表后,它会正确显示,并且可以正确运行,就像我在列表中选择一个对象时,它的方法可以正确运行。但是,当我尝试为其他JList复制所选对象时,无法检索它们。我尝试使用
从列表本身中获取它ARMAJTermek termek = (ARMAJTermek)TermekList.getSelectedValue();
ARMAJTermek termek = (ARMAJTermek)TermekList.getModel().getElementAt(TermekList.getSelectedIndex());
(不同的函数,这就是为什么某些变量甚至是不同类型都具有相同名称的原因。)
但是我得到消息,这些字符串无法转换为ARMAJTermek。但是我不需要对象的String表示,我需要对象本身。我的意思是,如果可以通过单击列表中的字符串表示形式来运行该方法,那么我应该能够复制它们,对吧?
public class ARMAJTermek {
String nev;
String cikkszam;
int bruttoKisker;
public ARMAJTermek(String nev, String cikkszam, int bruttoKisker) {
this.nev = nev;
this.cikkszam = cikkszam;
this.bruttoKisker = bruttoKisker;
}
@Override
public String toString () {
String toString = "";
toString = this.nev+"\n"+this.cikkszam+"\n"+Integer.toString(this.bruttoKisker)+" Ft";
return toString;
}
}
public ui_main() throws {
initComponents();
DefaultListModel model = new DefaultListModel<ARMAJTermek>();
TermekList.setModel(model);
ARMAJTermek termek[2];
termek[0] = new ARMAJTermek("lorem", "ipsum", 1);
termek[1] = new ARMAJTermek("lorem2", "ipsum2", 2);
}
public void addTermek(JList TermekList) {
DefaultListModel model = new DefaultListModel<ARMAJTermek>();
model.clear();
if(TermekList.getSelectedIndex() == 0){
TermekList.setSelectedIndex(1);
}
TermekList.removeAll();
for ( int i = 0; i < termek.length; i++ ) {
model.addElement(termek[i]);
}
TermekList.setModel(model);
TermekList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
TermekList.revalidate();
TermekList.repaint();
}
public void getTermek(JList TermekList) {
ARMAJTermek termek = (ARMAJTermek)TermekList.getSelectedValue();
ARMAJTermek termek = (ARMAJTermek)TermekList.getModel().getElementAt(TermekList.getSelectedIndex());
}
答案 0 :(得分:0)
我通过在函数内部创建一个新函数来运行它,该函数可以获取并存储ARMAJTermek对象:
ARMAJTermek termek = ARMAStaticFunctions.getTermek(TermekList);
public static ARMAJTermek getTermek(JList TermekList) {
ARMAJTermek termek = (ARMAJTermek)TermekList.getSelectedValue();
return termek;
}
现在它可以按预期工作,而不是尝试将对象转换为String。