提问者:小点点

在Swing JFrame中集成JavaFX的fxml文件


我一直在搜索将JavaFX与Swing JFrame集成。我找到了很多文章,但找不到与我想要的匹配。我想将使用Scene builder创建的整个fxml文件集成到JFrame中。例如,这是我使用Scene builder创建的fxml文件的内容。

<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="617.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2">
  <children>
    <ImageView fitHeight="72.25" fitWidth="571.0" layoutX="15.0" layoutY="15.0" pickOnBounds="true" preserveRatio="false">
      <image>
        <Image url="file:/opt/JavaFXSceneBuilder1.1/app/fxml-128.png" />
      </image>
    </ImageView>
    <Pane layoutX="349.0" layoutY="96.0" prefHeight="109.0" prefWidth="237.0">
      <children>
        <Label layoutX="14.0" layoutY="14.0" text="Certificate no." />
        <TextField layoutX="119.0" layoutY="11.0" prefWidth="118.0" />
        <Label layoutX="14.0" layoutY="58.0" text="Date" />
        <TextField layoutX="119.0" layoutY="55.0" prefWidth="118.0" />
      </children>
    </Pane>
    <Pane layoutX="14.0" layoutY="96.0" prefHeight="109.0" prefWidth="327.0">
      <children>
        <Label layoutX="14.0" layoutY="14.0" text="Party Name" />
        <Label layoutX="17.0" layoutY="55.0" text="Party Address" />
        <TextField layoutX="118.0" layoutY="14.0" prefWidth="200.0" />
      </children>
    </Pane>
    <TextArea layoutX="132.0" layoutY="151.0" prefHeight="40.0" prefWidth="200.0" wrapText="true" />
    <TableView layoutX="22.0" layoutY="215.0" prefHeight="200.0" prefWidth="564.0">
      <columns>
        <TableColumn prefWidth="75.0" text="Sr. No." />
        <TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="247.0" text="Particular" />
        <TableColumn prefWidth="75.0" text="Qty." />
        <TableColumn prefWidth="75.0" text="Rate" />
        <TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="92.0" text="Amount" />
      </columns>
    </TableView>
    <Label layoutX="22.0" layoutY="428.0" prefHeight="152.0" prefWidth="309.9998779296875" text="a." />
    <Label layoutX="345.0" layoutY="428.0" text="Authorized Signature" />
  </children>
</AnchorPane>

有没有办法在加载 JFrame 时加载此 fxml 代码,以便我们的 JFrame 包含 fxml 的内容。


共1个答案

匿名用户

我找到了解决问题的方法。下面的代码加载您提供的 fxml 文件。

Platform.runLater(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                Parent root = null;
                try {
                    root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
                    Scene scene = new Scene(root);
                    fxpanel.setScene(scene);
                } catch (Exception e) {
                    // TODO: handle exception
                    System.err.println("error : " + e.getMessage() + "cause : " + e.getCause() + "\n" + e.getStackTrace());
                }
            }
        });