2013-05-13 52 views
1

所以我有一個JComboBox,我可以選擇其中的每個項目就好了。在System.out.print中,我得到了正確的值,但是當我在字符串「Create Map」上預製一個.equals時,它不會被if控制語句捕獲。我在這裏錯過了很明顯的東西嗎JComboBox getSelectedItem返回正確的值,但.equals不工作

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作爲一個對象,而不是作爲一個字符串,因爲我已經是存儲在散列圖。是這樣嗎?

編輯:我想通了。我只是在上面的代碼中改變了這一點。感謝您的評論。

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

什麼是'JComboBox'包含哪些內容? 'String's?你能提供構建組合框的代碼,它是模型嗎?另外,嘗試使用'mapSelectionBox.getSelectedItem()。equalsIgnoreCase' – MadProgrammer 2013-05-13 00:28:37

+0

我更新了代碼以包含我正在構建的類的其餘部分。它們來自哈希映射,但創建映射是一個字符串。 – pmac89 2013-05-13 00:30:34

回答

3

問題是,您組合框中的項目不是String s。嘗試使用mapSelectionBox.getSelectedItem().equals("Create Map")來比較Object不會起作用,因爲equals將不會使用ObjecttoString方法,而是會對對象的狀態進行內部比較。

嘗試使用類似...

mapSelectionBox.getSelectedItem().toString().equalsIgnoreCase("Create Map") 

...,而不是...

2

你試圖所以當然的了,看看一個字符串等於非String對象,一個匿名內部類創建一個只擁有toString()返回您感興趣的字符串,如果測試會失敗。現在,如果您覆蓋該對象的equals(Object o)hashCode()以匹配該字符串的值,那麼您將得到不同的結果。

但更重要的是,您的JComboBox的模型應該只包含一種類型的對象,而不是與某些匿名內部類混合的字符串,它具有時髦的toString()結果。

相關問題