JComboBox具有相同名称的多个项目

时间:2015-03-13 10:24:07

标签: java jcombobox windowbuilder

我正在使用Eclipse和WindowBuilder。在我的JComboBox中,可以多次显示名称。但问题是我无法选择具有相同名称的第二个项目。它总是选择列表中的第一个。我无法使用第二个。
我无法发布图片,因此这里是指向它的链接:http://oi59.tinypic.com/15rmbcz.jpg

我使用的代码例如删除列表中的名称如下:

for(Element customer : dList){
        String name = customer.getChildText("name");
        if(GuiMain.item.equals(name)){
            String birthday = customer.getChildText("birthday")
            if(bDay.equals(birthday)){
            customer.getParent().removeContent(customer);
            document.setContent(root);

            XMLOutputter xmlOutput = new XMLOutputter();

            xmlOutput.setFormat(Format.getPrettyFormat());
            xmlOutput.output(document, new FileOutputStream("SAVE//File.xml"));
            continue;
            }
        }
    }

有没有解决方案?

1 个答案:

答案 0 :(得分:0)

您发布的代码不足以让我弄清楚JComboBox中的内容以及您如何修改它。但是,这里有一段代码可以帮助您:

private static class MyString {

    private static AtomicInteger objectCount = new AtomicInteger(0);

    private final String string;
    private final int id;

    public MyString(String string) {
        this.string = string;
        this.id = objectCount.getAndIncrement();
    }

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

}

public static void main(String[] args) {
    Vector<MyString> vector = new Vector<>();
    vector.add(new MyString("One"));
    vector.add(new MyString("Two"));
    vector.add(new MyString("Two"));;
    vector.add(new MyString("Three"));

    JComboBox<MyString> box = new JComboBox<>(vector);
    box.addItemListener(e -> {
        if (e.getStateChange() == ItemEvent.SELECTED) {
            MyString item = (MyString) e.getItem();
            System.out.println(String.format("Selected: %s (id=%s)", item, item.id));
        }
    });

    JFrame frame = new JFrame();
    frame.setContentPane(box);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

请注意MyString不会覆盖equals方法,这意味着如果它们是同一个实例,则两个对象相等(因此id实际上是多余的,它是只是打印输出)。