您好,我从Javafx开始冒险,我使用SceneBuilder制作主题,
这是我的XmlFile:http://pastebin.com/9fvhREKc
控制器:

public class Controller {

@FXML
private ListView templates;
@FXML
private ImageView image;

@FXML
void initalize() {
    ObservableList elements = FXCollections.observableArrayList();
    elements.add("first");
    elements.add("second");
    elements.add("third");
    image.setImage(new Image("file:test.jpg"));
    templates.setItems(elements);
}


}
和我的主要班级

public class Main extends Application {

@Override
public void start(Stage primaryStage) throws Exception {
    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(this.getClass().getResource("Sample.fxml"));
    Controller controller = new Controller();
    loader.setController(controller);
    Pane root = loader.load();
    Scene scene = new Scene(root);
    primaryStage.setTitle("Hello World!");
    primaryStage.setScene(scene);
    primaryStage.show();
}

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


}
当我启动应用程序时,我的主题工作正常,但是列表和图像为空; /

最佳答案

您需要在加载FXML之前设置控制器,因为控制器的initialize方法是在load()进程中调用的:

FXMLLoader loader = new FXMLLoader();
loader.setLocation(this.getClass().getResource("Sample.fxml"));
Controller controller = new Controller();
loader.setController(controller);
Pane root = loader.load();
Scene scene = new Scene(root);


还要注意,您在Controller类中有一个拼写错误:方法名initialize拼写错误。由于FXMLLoader使用反射来查找和执行此方法,因此将阻止执行该方法:

public class Controller {

    @FXML
    private ListView templates;
    @FXML
    private ImageView image;

    @FXML
    // void initalize() {
    void initialize() {
        ObservableList elements = FXCollections.observableArrayList();
        elements.add("first");
        elements.add("second");
        elements.add("third");
        image.setImage(new Image("file:test.jpg"));
        templates.setItems(elements);
    }

}

09-08 08:23