swing - 使用 JFXPanel 时如何解决对齐问题?
问题描述
我的问题是,我有一个普通的 JavaFX fxml 文件,当我正常启动它并调整它的大小时,它会自动重新对齐它的元素。但是当我用 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);
我研究了几个小时,并没有真正找到解决我问题的方法。也许我搜索错了?如果有人可以帮助我,我将不胜感激。
我对 Group 对象“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
到默认JFrame
使用的 a 中。
更改设置的其他布局管理器的大小和位置。
例如:BorderLayout
JFXPanel
frame.setLayout(new GridBagLayout());
推荐阅读
- java - 从 Java Web 应用程序管理 Linux 用户身份验证和文件系统权限
- javascript - DRY React:扩展与否。我的团队似乎不同意
- android - 另一个 onNewIntent() 问题 | 还没叫
- reactjs - 在使用“create-react-app”制作的反应应用程序中使用“react-leaflet”库的正确方法是什么?
- node.js - 轻量级心跳应用程序的推荐框架?
- c++ - 具有枚举特定实现和共享功能 (CRTP) 的类模板
- java - 如何将属性的值传播到属于我的类的其他类型的属性?
- bash - 如何创建包含文件夹中所有文件名称的数组?
- android - 如何使工具栏透明谁的父母是Appbarlayout?
- c# - 在 Foreach 循环 C# 中使用 Orderby 的困难