Reputation: 169
My problem is, that i have a normal JavaFX fxml file, which automatically realigns its elements when i start it normally and resize it. But i when i start it with the JFXPanel suddenly nothing realigns anymore. And i have no idea what the reason could be. (I have to use this method to start my gui, there is no other way)
My code:
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);
I researched for hours and don't really find a solution to my problem. Maybe i searched wrong? i would be really grateful if someone could help me.
Im a bit suspicious with the Group object "root" but i have no clue what it does. (I have this code from a website, because im inexperienced with JFXPanels so im not entirely sure what every line does)
My whole class:
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);
}
}
And my fxml file
<?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>
When you start the gui and resize it the left and right label should go further away. They should have the same distance to the borders of the gui.
Upvotes: 2
Views: 77
Reputation: 18812
You are adding the JFXPanel
to a JFrame
which uses BorderLayout
by default.
To change the resizing and positioning of the JFXPanel
set other layout manager.
For example:
frame.setLayout(new GridBagLayout());
Upvotes: 1