Swing 使用JFXPanel时如何解决对齐问题?

Swing 使用JFXPanel时如何解决对齐问题?,swing,javafx,dynamic,resize,jfxpanel,Swing,Javafx,Dynamic,Resize,Jfxpanel,我的问题是,我有一个普通的JavaFXML文件,当我正常启动它并调整它的大小时,它会自动重新调整它的元素。但是当我用JFXPanel启动它时,突然没有任何东西重新排列了。我不知道原因是什么。(我必须使用此方法启动gui,没有其他方法) 我的代码: final JFXPanel panel = new JFXPanel(); panel.addComponentListener(new ComponentAdapter() { @Override public void compo

我的问题是,我有一个普通的JavaFXML文件,当我正常启动它并调整它的大小时,它会自动重新调整它的元素。但是当我用JFXPanel启动它时,突然没有任何东西重新排列了。我不知道原因是什么。(我必须使用此方法启动gui,没有其他方法)

我的代码:

final JFXPanel panel = new JFXPanel();
panel.addComponentListener(new ComponentAdapter() {
    @Override
    public void componentResized(ComponentEvent e) {
        super.componentResized(e);
        // Maybe here some code?
    }
});

JFrame frame = new JFrame();

Platform.runLater(() -> {
    try {
        Group root = new Group();
        Scene scene = new Scene(root);

        FXMLLoader loader = new FXMLLoader(getClass().getResource("myGui.fxml"));
        Node node = loader.load();

        root.getChildren().add(node);
        panel.setScene(scene);
    } catch (IOException e) {
        e.printStackTrace();
    }
});

frame.add(panel);
frame.pack();
frame.setVisible(true);
我研究了几个小时,并没有真正找到解决我问题的办法。也许我找错了?如果有人能帮助我,我将非常感激

我对组对象“root”有点怀疑,但我不知道它是干什么的。(我从一个网站上得到了这段代码,因为我对JFXPanels缺乏经验,所以我不能完全确定每一行都做了什么)

我的全班同学:

public class Test {
    public static void main(String[] args) {
        Test test = new Test();
        test.startGui();
    }

    public void startGui() {
        final JFXPanel panel = new JFXPanel();
        panel.setPreferredSize(new Dimension(600, 400));
        panel.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentResized(ComponentEvent e) {
                super.componentResized(e);
                // Maybe here some code?
            }
        });

        JFrame frame = new JFrame();

        Platform.runLater(() -> {
            try {
                Group root = new Group();
                Scene scene = new Scene(root);

                FXMLLoader loader = new FXMLLoader(getClass().getResource("myGui.fxml"));
                Node node = loader.load();

                root.getChildren().add(node);
                panel.setScene(scene);
            } catch (IOException e) {
                e.printStackTrace();
            }
        });

        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }
}
和我的fxml文件

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

<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.StackPane?>


<HBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <StackPane prefHeight="150.0" prefWidth="200.0" HBox.hgrow="ALWAYS">
         <children>
            <Label text="left" />
         </children>
      </StackPane>
      <StackPane prefHeight="150.0" prefWidth="200.0" HBox.hgrow="ALWAYS">
         <children>
            <Label text="right" />
         </children>
      </StackPane>
   </children>
</HBox>


当您启动gui并调整其大小时,左标签和右标签应该离得更远。它们与gui边框的距离应相同。

您正在将
JFXPanel
添加到默认使用
BorderLayout
JFrame

要更改
JFXPanel
的大小和位置,请设置其他布局管理器
例如:


frame.setLayout(新的GridBagLayout())

你能提供一个简单的示例,以便有人可以在不做任何修改的情况下复制和粘贴你的问题,并重现问题吗?@jewelsea我添加了我的类和fxml文件,谢谢你的帮助。