将swingNode添加到javaFx

将swingNode添加到javaFx,java,javafx,swingutilities,Java,Javafx,Swingutilities,我用javaFx编写了一个应用程序,想在SwingNode的窗格中添加一个JButton 这是我的fxml控制器 public class Controller implements Initializable { @FXML private Pane pane; private static final SwingNode swingNode = new SwingNode(); @Override public void initialize(U

我用javaFx编写了一个应用程序,想在SwingNode的窗格中添加一个JButton 这是我的fxml控制器

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);

        });
    }
}
但它不起作用,那它怎么了? 顺便说一句,当我在窗格中添加一个非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);

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

对于当前代码,按钮将添加到
JPanel
,但由于
JPanel
的宽度和高度为零,因此
SwingNode
也为零,因此您无法看到按钮


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

由于您是“手动”管理所有布局,因此通过调用
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);

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

对于当前代码,按钮将添加到
JPanel
,但由于
JPanel
的宽度和高度为零,因此
SwingNode
也为零,因此您无法看到按钮


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

可能没有任何区别,但为什么
swingNode
是静态的?可能没有任何区别,但为什么
swingNode
是静态的?