2013-06-20 99 views
0

我在javaFX中的組合框有一些問題。我設計我的組合框在現場建設者:javaFX中的組合框

<ComboBox fx:id="categoryComboBox" prefHeight="21.0" prefWidth="405.0" GridPane.columnIndex="1" GridPane.rowIndex="2"> 
     <items> 
     <FXCollections fx:factory="observableArrayList"> 
      <String fx:value="Woodenware" /> 
      <String fx:value="Stoneware" /> 
      <String fx:value="Metalware" /> 
      <String fx:value="Fabric" /> 
     </FXCollections> 
     </items> 
    </ComboBox> 

這是我的控制器類:

@FXML 
private ComboBox<?> categoryComboBox; 
public void setCategoryComboBox(ComboBox<String> categoryComboBox) { 
    this.categoryComboBox = categoryComboBox; 
} 

public ComboBox<String> getCategoryComboBox() { 
    return categoryComboBox; 
} 

@FXML 
private void comboBoxSelection(ActionEvent event) { 
    categoryComboBox.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() { 
     public void changed(ObservableValue<? extends String> ov, 
      String old_val, String new_val) { 
       String categoryStr = getCategoryComboBox().getValue().toString(); //Don't know what to put here 
    } 

當我試圖從ComboBox中選定的項目:

int category = panel.getCategoryComboBox().getValue() 

它給了我一個錯誤消息「不兼容的數據錯誤,我不知道爲什麼。我是場景創建者和netbeans的新手,所以請告訴我我錯在哪裏。

在此先感謝。

+1

看到https://gist.github.com/jewelsea/3062859,供你參考。 –

+0

請接受適合您的答案@OmarAlhadidy https://meta.stackexchange.com/a/5235 – Developer66

回答

0

您的ComboBox上有一個泛型類型說明符,所以它返回的任何值都是一個String。

你不能指定一個字符串到一個int,這就是爲什麼你會得到一個「不兼容的數據類型」的錯誤,你試圖這樣做。

相反,如果你的類別類型設置爲一個字符串,你將不再得到一個「不兼容的數據類型錯誤」

String category = panel.getCategoryComboBox().getValue() 
+0

好的非常感謝。我已經解決了它,但我不確定我是否以正確的方式進行。 –

+0

你在嗎?我在comboBox –

+0

@Carol上遇到了一些問題我不確定你現在的問題是什麼。我認爲,如果您按照我的回答中的指示並查看Shreyas在評論中發佈的要點示例,那麼您將能夠修復原始類型不兼容問題(提示:將全部替換爲)。如果仍有問題,請構建併發布[SSCCE](http://sscce.org/)和完整的錯誤堆棧跟蹤。 – jewelsea

0

的錯誤是在這一行:

private ComboBox<?> categoryComboBox; 

你不能從?轉換爲int。因此,改變這一行:

private ComboBox<Integer> categoryComboBox; 

然後,你必須改變梅索德:

public ComboBox<String> getCategoryComboBox() {...} 

public ComboBox<Integer> getCategoryComboBox() {...}