如何从普通的java类调用javafx

时间:2018-03-05 18:51:12

标签: java user-interface javafx fxml

我想从正常的类调用/打开gui / fxml文件,我真的很难找到一种方法来实现这一点,我试图实例化控制器类,但我没有得到启动功能,是否有可能做我想做的事情?

正常班级

sed -n '/<BATCH>/,/<\/BATCH>/p' $log_file > $ouput_file

fxml文件

    public class ReadXMLFile {

  public static void main(String argv[]) {

    }


}

controllerClass

    <?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>

2 个答案:

答案 0 :(得分:2)

  

我可以做我想做的事情吗?

否(至少,不容易,或以某种有意义的方式)。

JavaFX应用程序的生命周期由Application类的实例控制。此外,您需要启动JavaFX工具包并设置FX应用程序线程运行。静态Application.launch(...)方法实现了这一点,并创建了Application类的必需实例,并在其上调用了适当的生命周期方法。

因此,只需按照标准模式,将ReadXMLFile类转换为Application的子类,使main(...)方法只调用launch(),并定义{{ 1}}加载FXML等的方法

答案 1 :(得分:1)

为了完整起见:

从JavaFX 9开始,可以在不依赖Application.launch的情况下启动应用程序。您可以使用Platform.startup来实现此目的。请注意,您只能在申请中使用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的类作为切入点,并使用init / start方法进行任何初始化操作#39 ; d通常来自main方法。