Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从swing jCombobox移动到javaFX ComboBox_Java_Swing_Javafx_Combobox - Fatal编程技术网

从swing jCombobox移动到javaFX ComboBox

从swing jCombobox移动到javaFX ComboBox,java,swing,javafx,combobox,Java,Swing,Javafx,Combobox,我有一个旧的swing Jcombobox,我以前是这样使用的 baudRatecomboBox = new JComboBox(baudRates); baudRatecomboBox.setSelectedIndex(1); GridBagConstraints gbc_baudRateComboBox = new GridBagConstraints(); gbc_baudRateComboBox.fill = GridBagConstraints.HORIZONT

我有一个旧的swing Jcombobox,我以前是这样使用的

baudRatecomboBox = new JComboBox(baudRates);
    baudRatecomboBox.setSelectedIndex(1);
    GridBagConstraints gbc_baudRateComboBox = new GridBagConstraints();
    gbc_baudRateComboBox.fill = GridBagConstraints.HORIZONTAL;
    gbc_baudRateComboBox.insets = new Insets(0, 0, 5, 5);
    gbc_baudRateComboBox.gridx = 1;
    gbc_baudRateComboBox.gridy = 3;
    getContentPane().add(baudRatecomboBox, gbc_baudRateComboBox);
String[] baudRates = { "2400", "4800", "9600", "14400", "19200", "38400", "56000", "115200"  };
我正在使用JavaFX重新编写我的应用程序,我无法填充组合框

这是我的FXML

<ComboBox id="baudRatecomboBox" fx:id="baudRateComboBox" prefHeight="30.0" prefWidth="87.0" promptText="Baud" />

这是我的Java

@FXML
ComboBox baudRateComboBox;

public void start(Stage primaryStage) {
    try {
        Parent root = FXMLLoader.load(getClass().getResource("LaserControllerUI.fxml"));
        Scene scene = new Scene(root);
        primaryStage.setTitle("Laser Controller");
        primaryStage.setScene(scene);
        primaryStage.show();
        scene.getStylesheets().add
         (LaserControllerUI.class.getResource("LaserControllerUI.css").toExternalForm());
        ComboBox<String> baudRateComboBox = new ComboBox();
        baudRateComboBox.getItems().addAll(baudRates);       
        baudRateComboBox.setVisible(true);
@FXML
组合框波特率组合框;
公共无效开始(阶段primaryStage){
试一试{
父根=FXMLLoader.load(getClass().getResource(“LaserController.fxml”);
场景=新场景(根);
初级阶段。设置标题(“激光控制器”);
初级阶段。场景(场景);
primaryStage.show();
scene.getStylesheets().add
(LaserControllerUI.class.getResource(“LaserControllerUI.css”).toExternalForm());
ComboBox波特率ComboBox=新ComboBox();
baudRateComboBox.getItems().addAll(波特率);
波特率组合框.setVisible(true);

为什么我的组合框没有填充?

您只是没有将费率添加到屏幕上显示的
组合框中

由于您似乎让
fxmloader
创建控制器实例,因此也不会将
ComboBox
注入到属于start方法的
应用程序
对象中

顺便说一句:在大多数情况下,使用
应用程序
类作为控制器是个坏主意

如果
组合框
中的项目集始终相同,则可以使用控制器的
初始化
方法来设置项目。此外,最好指定类型参数

@FXML
private ComboBox<String> baudRateComboBox;

@FXML
private void initialize() {
    // called by FXMLLoader after injecting fields
    baudRateComboBox.getItems().addAll(baudRates);
}
@FXML
专用组合框波特率组合框;
@FXML
私有void初始化(){
//在注入字段后由FXMLLoader调用
baudRateComboBox.getItems().addAll(波特率);
}

您也可以直接在fxml文件中指定项目:


这需要以下导入作为处理说明:




如果您需要将
波特率
数组传递给控制器,您可以在此处找到一些解决方案:

您只是没有将速率添加到屏幕上显示的
组合框中

由于您似乎让
fxmloader
创建控制器实例,因此也不会将
ComboBox
注入到属于start方法的
应用程序
对象中

顺便说一句:在大多数情况下,使用
应用程序
类作为控制器是个坏主意

如果
组合框
中的项目集始终相同,则可以使用控制器的
初始化
方法来设置项目。此外,最好指定类型参数

@FXML
private ComboBox<String> baudRateComboBox;

@FXML
private void initialize() {
    // called by FXMLLoader after injecting fields
    baudRateComboBox.getItems().addAll(baudRates);
}
@FXML
专用组合框波特率组合框;
@FXML
私有void初始化(){
//在注入字段后由FXMLLoader调用
baudRateComboBox.getItems().addAll(波特率);
}

您也可以直接在fxml文件中指定项目:


这需要以下导入作为处理说明:




如果您需要将
波特率
数组传递给控制器,您可以在这里找到一些解决方案:

您必须在JavaFX中使用“ObservableList”。看看应该如何使用它filled@NicoT使用了一个
ObservableList
:由
ComboBox.getItems()返回的列表
,这也是可能的。您必须在JavaFX中使用“ObservableList”。看看应该如何使用它filled@NicoT使用了一个
ObservableList
:由
ComboBox.getItems()返回的列表
,这也是可能的。您好,谢谢您的详细回复。我现在可以使用了。您能解释一下“ComboBox baudRateComboBox”在我的代码中的作用吗?它来自一个教程,我认为这是在初始化ComboBox?@DisplayName您发布的信息不足以确定,但我建议您阅读描述描述加载过程工作原理的以下示例末尾的选项。某些实例的
baudRateComboBox
字段可能是由
FXMLLoader
设置的,但即使是调用
start
方法的实例字段,也不会使用该字段,而是使用局部变量。您好,谢谢您的详细回复。我现在已经可以使用了。您能解释一下“ComboBox baudRateComboBox”在我的代码中的作用吗?它来自一个教程,我认为这是初始化ComboBox?@DisplayName您发布的信息不足以确定,但我建议您阅读以下e结尾的描述描述加载过程如何工作的示例。可能某些实例的
baudRateComboBox
字段是由
FXMLLoader
设置的,但即使是调用
start
方法的实例字段,也不会使用该字段,而是使用局部变量。