簡體   English   中英

以編程方式設置.fxml文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM