您好,我从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);
}
}