2013-06-20 101 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() {...}