从JList检索自定义对象

问题描述 投票:-1回答:1

我创建了一个列表和一个带有自定义对象的模型。我想检索列表中的对象,但是,我收到一条错误消息,提示无法将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());
}
java swing jlist
1个回答
0
投票
ARMAJTermek termek = ARMAStaticFunctions.getTermek(TermekList); public static ARMAJTermek getTermek(JList TermekList) { ARMAJTermek termek = (ARMAJTermek)TermekList.getSelectedValue(); return termek; }

现在它可以按预期工作,而不是尝试将对象转换为String。

© www.soinside.com 2019 - 2024. All rights reserved.