Java Swing JList的键值对

Art*_*gas 2 java swing key jlist

我有我的JComboBox的解决方案,以获得键/值对的效果,以显示文本,但检索ID,如ID = 2,但文本是"香蕉".

我现在需要将其实现为JList,但是无法从返回的JList中获取Object,以便我可以检索该值.

public class ComboItem {

    private String value;
    private String label;

    public ComboItem(String value, String label) {
        this.value = value;
        this.label = label;
    }

    public String getValue() {
        return this.value;
    }

    public String getLabel() {
        return this.label;
    }

    @Override
    public String toString() {
        return label;
    }
}


DefaultListModel listmodel = new DefaultListModel();
JList cAktkod = new JList(listmodel);
int pos = cAktkod.getModel().getSize();

listmodel.add(pos, new ComboItem(resultSet.getString("MMCFI5"),resultSet.getString("CTTX40")));
Run Code Online (Sandbox Code Playgroud)

但是在这个阶段,如果我这样做

cAktkod.getSelectedValue();
Run Code Online (Sandbox Code Playgroud)

它返回一个Object,我不知道如何让它给我我的ComboItem对象,以便我可以getValue()代替

bra*_*ain 6

基本上JList不知道或关心Object的哪个类型(即子类)在列表中.但是,如果你把所有内容放入ComboItem,那么你得到的对象将是一个ComboItem.你只需要将它转换为告诉编译器它是什么类型.

Object selectedObj = cAktkod.getSelectedValue();
if (selectedObj instanceof ComboItem) {
    ComboItem selectedItem = (ComboItem) selectedObj;
}
else {
    // something has gone wrong!
}
Run Code Online (Sandbox Code Playgroud)


And*_*son 5

概述了一个简单的解决方案.如果您希望避免将对象转换回其基本类型,则还有另一种方法.

  • 创建一个通用 VectorComboItem.
  • 添加每个项目 Vector
  • 创建JList使用Vector
  • 在选择时,获取所选索引,然后调用Vector.elementAt(index)以获取相应的对象.