[英]Setup .fxml file programmatically
我習慣於像下面給出的那樣用JavaFx編寫代碼,因為幾年前就是這樣學習的。
import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;
import javafx.stage.*;
public class test extends Application {
int c=0;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Demo");
Button b = new Button("Click me");
Label l = new Label("Count=" + c);
VBox v = new VBox(20);
v.getChildren().addAll(b, l);
b.setOnAction(event -> {
c++;
l.setText("Count=" +c);
});
primaryStage.setScene(new Scene(v, 300, 300));
primaryStage.show();
}
}
我最近安裝了JetBrains IntelliJ IDEA Ultimate Edition 2018.1.6,並且看到要打開primaryStage窗口,我需要一個fxml文件。
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.layout.GridPane?> <GridPane alignment="center" hgap="10" vgap="10" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Main"> </GridPane>
我必須做的
primaryStage.setScene(new Scene(FXMLLoader.load(getClass().getResource("sample.fxml")), 300, 300));
如果運行第一個代碼段,則不會顯示任何內容。 但是,如果我用FXMLLoader.load(getClass()。getResources(“ sample.fxml”))替換VBox v,則只顯示一個沒有Button和Label的窗口。 有沒有一種方法可以忽略fxml文件的使用? 或者我可以使用標准的編碼方式(第一個代碼段),讓編譯器為我將其更改為fxml格式嗎?
這是因為當每個Label為一個像素時,我希望在網格布局中具有100x100標簽。 因此,在代碼中,很容易運行嵌套的for循環以使用2-d數組初始化和尋址每個Label。 但是在fxml中初始化1000個標簽太冗長,費力且不合邏輯。
我從不需要在JetBrains IntelliJ IDEA社區版2017.0.2中執行這些操作。 當我升級到Ultimate Edition 2018.1.6時,出現了這些錯誤。
您可以在沒有FXML的JavaFX上使用IntelliJ。
問:有沒有一種方法可以忽略fxml文件的使用?
答:考慮到您在創建新的JavaFX項目時從IntelliJ獲得的默認設置中引用的代碼段,是的,它們的默認設置使用.fxml
但不需要使用它。 您可以刪除該sample.fxml
文件並根據需要重寫start
。
旁注:沒有什么可以阻止您在同一項目中同時使用fxml和代碼方法,在某些情況下,使用fxml是更好的方法,而在其他情況下,最好使用代碼。
問:或者我可以使用標准編碼方式(第一個代碼段),讓編譯器為我將其更改為fxml格式嗎?
答:無法將Java代碼轉換為fxml
,但是正如我已經說過的那樣,您可以決定使用哪個代碼,甚至可以在同一項目中使用它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.