JComboBox getSelectedItem返回正确的值,但.equals不起作用

时间:2013-05-13 00:27:35

标签: java swing jcombobox

所以我有一个JComboBox,我可以选择其中的每个项目。在System.out.print中,我得到了正确的值,但是当我在字符串“Create Map”上预先形成.equals时,它不会被if控制语句捕获。我错过了一些明显的东西吗?

mapSelectionBox = new JComboBox();
    mapSelectionBox.setEditable(false);
    Map aMapValues;
    for(Entry<String, Map> obj : runInfo.getHashMap().entrySet()){
        aMapValues = obj.getValue();
        mapSelectionBox.addItem(obj.getKey());
    }
    Object addNewMap = new Object(){public String toString(){ return "Create Map"; } };

    mapSelectionBox.addItem(addNewMap);

mapSelectionBox.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
            if(mapSelectionBox.getSelectedItem().equals("Create Map")){
                xCoordinatesTextField = new JTextField();
                xCoordinatesTextField.setEditable(true);
                windowContainer.add(xCoordinatesTextField, "6, 4, right, default");
                System.out.println("Test");
            }else{
                System.out.println(mapSelectionBox.getSelectedItem());
            }
        }
    });

所以我开始认为将getSelectedItem作为Object进行评估,而不是将其作为字符串存储在哈希映射中。是这种情况吗?

编辑:我明白了。我刚才在上面的代码中改了这个。感谢您的评论。

String selectedItem = mapSelectionBox.getSelectedItem().toString();
            if(selectedItem.equalsIgnoreCase("create map"))

2 个答案:

答案 0 :(得分:3)

问题是,您组合框中的项目不是String。尝试使用ObjectmapSelectionBox.getSelectedItem().equals("Create Map")进行比较是行不通的,因为equals不会使用toString的{​​{1}}方法,但会做内部比较对象的状态。

尝试使用类似......

的内容
Object

...,而不是...

答案 1 :(得分:2)

你正试图查看一个String是否等于一个非String对象,一个由匿名内部类创建的,一个只有toString()的对象返回你感兴趣的String,所以当然如果测试失败。现在,如果您覆盖该Object的equals(Object o)hashCode()以匹配String的那个,那么您将得到不同的结果。

但更重要的是,你的JComboBox模型应该只包含一种类型的对象,而不是字符串与一些具有时髦toString()结果的匿名内部类混合。