将swingNode添加到javaFx
我用javaFx编写了一个应用程序,想在SwingNode的窗格中添加一个JButton 这是我的fxml控制器将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
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
是静态的?