gpt4 book ai didi

java - 将 swingNode 添加到 javaFx

转载 作者:行者123 更新时间:2023-12-02 03:27:01 27 4
gpt4 key购买 nike

我用 javaFx 编写了一个应用程序,想将 JButton 添加到 SwingNode 中的 Pane 中这是我的 fxml Controller

public class Controller implements Initializable {

@FXML
private Pane pane;

private static final SwingNode swingNode = new SwingNode();

@Override
public void initialize(URL location, ResourceBundle resources) {
createSwingContent(swingNode);
pane.getChildren().add(swingNode);
}

@FXML
private void handleButtonAction(ActionEvent event) {

}

private void createSwingContent(final SwingNode swingNode) {
SwingUtilities.invokeLater(() -> {
JButton jButton = new JButton("Click me!");
jButton.setBounds(0,0,80,50);

JPanel panel = new JPanel();
panel.setLayout(null);
panel.add(jButton);

swingNode.setContent(panel);

});
}
}

但是它不起作用,那么它有什么问题呢?顺便说一句,当我向 Pane 中添加一个非 swingNode 时,它​​可以工作并显示按钮,但是在 swingNode 方式中它不起作用!

最佳答案

由于您是“手动”管理所有布局,因此通过在按钮上调用 setLayout(null)setBounds(...); ,您需要也可以手动调整面板尺寸:

private void createSwingContent(final SwingNode swingNode) {
SwingUtilities.invokeLater(() -> {
JButton jButton = new JButton("Click me!");
jButton.setBounds(0,0,80,50);

JPanel panel = new JPanel();
panel.setLayout(null);
panel.add(jButton);

panel.setSize(90, 60);

swingNode.setContent(panel);

});
}

或者,使用布局管理器(例如,仅使用默认布局管理器,如此处所示):

private void createSwingContent(final SwingNode swingNode) {
SwingUtilities.invokeLater(() -> {
JButton jButton = new JButton("Click me!");
// jButton.setBounds(0,0,80,50);

jButton.setPreferredSize(new Dimension(80, 50));

JPanel panel = new JPanel();
// panel.setLayout(null);
panel.add(jButton);

swingNode.setContent(panel);

});
}

使用当前代码,该按钮将添加到 JPanel 中,但由于 JPanel 的宽度和高度为零,因此 SwingNode 的宽度和高度也为零>,因此您看不到该按钮。

顺便说一句,将 swingNode 设为静态是错误的。如果您要在应用程序中多次加载 FXML,则场景图中的两个不同位置将具有相同的节点,这是不允许的。

关于java - 将 swingNode 添加到 javaFx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38691580/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com