package animated; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import javafx.application.Platform; import javafx.embed.swing.JFXPanel; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.layout.BorderPane; import javafx.scene.layout.GridPane; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javax.swing.JFrame; import javax.swing.SwingUtilities; class GridPanelMisbehave implements ComponentListener, Runnable { public static void main(String[] args) { SwingUtilities.invokeLater(new GridPanelMisbehave()); } private JFXPanel fxPanel = new JFXPanel(); private BorderPane layout; private Group root; private Scene scene; @Override public void run() { final JFrame f = new JFrame("Test JFXPanel resizing"); f.setSize(800, 600); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLayout(new BorderLayout()); f.add(fxPanel, BorderLayout.CENTER); fxPanel.addComponentListener(this); f.setVisible(true); } @Override public void componentResized(ComponentEvent e) { Platform.runLater(new Runnable() { public void run() { resizeJFX(); } }); } @Override public void componentMoved(ComponentEvent e) { } @Override public void componentShown(ComponentEvent e) { } @Override public void componentHidden(ComponentEvent e) { } private void resizeJFX() { if (fxPanel.getScene() == null) { layout = new BorderPane(); layout.setTop(new Rectangle(200, 50, Color.DARKCYAN)); layout.setBottom(new Rectangle(200, 50, Color.DARKCYAN)); Rectangle center = new Rectangle(100, 100, Color.MEDIUMAQUAMARINE); //layout.setCenter(center); GridPane grid = new GridPane(); grid.add(center, 0, 0); layout.setCenter(grid); layout.setLeft(new Rectangle(50, 100, Color.DARKTURQUOISE)); layout.setRight(new Rectangle(50, 100, Color.DARKTURQUOISE)); root = new Group(); root.getChildren().add(layout); scene = new Scene(root); fxPanel.setScene(scene); } Dimension d = fxPanel.getSize(); layout.setPrefSize(d.width, d.height); } }