簡體   English   中英

如何從普通的Java類調用javafx

[英]How to call javafx from a normal java class

我想從普通的類中調用/打開gui / fxml文件,我確實很難找到一種方法來執行此操作,我嘗試實例化控制器類,但是我沒有啟動函數,甚至可以做我想做的事嗎?

普通班

    public class ReadXMLFile {

  public static void main(String argv[]) {

    }


}

fxml文件

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

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.AnchorPane?>


<AnchorPane id="AnchorPane" prefHeight="442.0" prefWidth="449.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.141" fx:controller="gis_map.CitizenScheduledController">
   <children>
      <TableView layoutX="1.0" layoutY="-1.0" prefHeight="384.0" prefWidth="447.0">
        <columns>
          <TableColumn prefWidth="75.0" text="CitizenId" />
          <TableColumn prefWidth="75.0" text="Name" />
            <TableColumn prefWidth="75.0" text="Address" />
            <TableColumn prefWidth="75.0" text="Arrival" />
            <TableColumn prefWidth="75.0" text="Departure" />
            <TableColumn prefWidth="75.0" text="Actions" />
        </columns>
      </TableView>
      <Button layoutX="373.0" layoutY="396.0" mnemonicParsing="false" text="Approve" />
   </children>
</AnchorPane>

controllerClass

    package gis_map;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.Initializable;


public class CitizenScheduledController implements Initializable {


    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    

}

有可能做我想做的事嗎?

否(至少,不容易,或采取有意義的方式)。

JavaFX應用程序的生命周期由Application類的實例控制。 此外,您需要啟動JavaFX工具包並設置FX應用程序線程運行。 靜態Application.launch(...)方法可完成此操作,並創建Application類的必需實例並在其上調用適當的生命周期方法。

因此,只需遵循標准模式,將ReadXMLFile類設置為Application的子類,使main(...)方法僅調用launch() ,然后定義start()方法即可加載FXML,依此類推。

為了完整性:

從JavaFX 9開始,可以在不依賴Application.launch的情況下啟動應用Application.launch 您可以為此使用Platform.startup 請注意,您只能在應用Application.launch一次Platform.startup和/或Application.launch

public static void main(String[] args) {
    Platform.startup(() -> {
        // display empty scene after startup
        Scene scene = new Scene(new Pane());
        Stage stage = new Stage();
        stage.setScene(scene);
        stage.show();
    });
}

通常最好使用正常的應用程序生命周期,並使用擴展Application的類作為入口點,並對通常要從main方法執行的任何初始化使用init / start方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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