首页 > 解决方案 > 无法调用“javafx.scene.control.ComboBox.getItems()”,因为“Controller.getMyBox()”的返回值为 null

问题描述

不知何故,我无法从另一个类向我的 ComboBox 变量添加项目,因为它总是说变量的值为 null 或其 getter 的返回值为 null。

我使用 Scene Builder 构建 Sample.fxml,将控制器作为 Controller 类,从 UserInterface 类中获取整个内容

FXML

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.layout.BorderPane?>

<BorderPane xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controller">
   <center>
      <ComboBox fx:id="myBox" prefWidth="150.0" BorderPane.alignment="CENTER" />
   </center>
</BorderPane>

控制器

public class Controller {
    @FXML
    private ComboBox<String> myBox;

    public ComboBox<String> getMyBox() {
        return myBox;
    }

    public void initialize() {
        ObservableList<String> defaultTicker = FXCollections.observableArrayList("Something");
        myBox.getItems().addAll(defaultTicker);
    }
}

用户界面

public class UserInterface extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            FXMLLoader loader = new FXMLLoader(getClass().getResource("Sample.fxml"));
            Parent root = loader.load();
            Controller controller = new Controller();

            primaryStage.setTitle("Title");
            primaryStage.setScene(new Scene(root));
            primaryStage.show();

            List<String> addStuff = new ArrayList<String>();
            addStuff.add("a");
            addStuff.add("b");
            addStuff.add("c");
            controller.getMyBox().getItems().addAll(addStuff);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

运行后出现界面,里面只有“Something”选项。所以我猜它初始化很好? 启动后的界面

我做错了什么?到目前为止,我似乎找不到任何解决方案。

提前致谢。

标签: javajavafxcomboboxnullpointerexception

解决方案


推荐阅读