title: How to resize Swing control which is inside SwingNode in JavaFX8?
body: <p>How to resize <code>Swing</code> control which is inside <code>SwingNode</code> in JavaFX8?</p>
  
  <p>Sometimes, I has controls resized inside <code>SwingNode</code>. But <code>SwingNode</code> seems to resist this.</p>
  
  <p>It is said in <a href="http://download.java.net/jdk8/jfxdocs/javafx/embed/swing/SwingNode.html#resize-double-double-" rel="noreferrer"><code>resize()</code></a> apidoc, that </p>
  
  <blockquote>
    <p>Applications should not invoke this method directly. If an application
    needs to directly set the size of the SwingNode, it should set the
    Swing component's minimum/preferred/maximum size constraints which
    will be propagated correspondingly to the SwingNode and it's parent
    will honor those settings during layout.</p>
  </blockquote>
  
  <p>But apparently it does not work.</p>
  
  <p>Example code is below.</p>
  
  <p>The question is: how to allow control to turn bigger?</p>
  
  <pre><code>public class Try_Sizes_01 extends Application {
  
      private static final Logger log = LoggerFactory.getLogger(Try_Sizes_01.class);
  
      private static final String text = "Very Long Text For Appear On Button ";
      private static int position = 7;
  
      //private JButton button = new JButton("short");
      private JButton button = new JButton(text.substring(0, position));
  
      private SwingNode swingNode = new SwingNode();
      {
          swingNode.setContent(button);
      }
  
      @Override
      public void start(Stage stage) throws Exception {
  
  
          Group group = new Group();
          group.getChildren().add(swingNode);
  
          Scene scene = new Scene(group);
  
          stage.setTitle("Try_Sizes_01");
          stage.setScene(scene);
          stage.show();
  
          SwingUtilities.invokeLater(new Runnable() {
  
              @Override
              public void run() {
  
                  new Timer(1000, new ActionListener() {
  
                      @Override
                      public void actionPerformed(ActionEvent e) {
  
                          /*
                          button.setText(button.getText() + text.charAt(position));
  
                          position++;
                          if( position &gt;= text.length() ) {
                              position=0;
                          }
                          */
  
                          button.setPreferredSize(new Dimension((int)button.getPreferredSize().getWidth()+10, (int)button.getPreferredSize().getHeight()));
                          button.setMinimumSize(new Dimension((int)button.getPreferredSize().getWidth(), (int)button.getPreferredSize().getHeight()));
                          //button.revalidate();
  
                          //button.setBounds(0, 0, (int)button.getBounds().getWidth()+10, (int)button.getBounds().getHeight());
  
                          Platform.runLater(new Runnable() {
  
                              @Override
                              public void run() {
  
                                  //swingNode.autosize(); // does not work
                                  //swingNode.resize(button.getBounds().getWidth(), button.getBounds().getHeight()); // does not work and cancels button resizing
                                  //swingNode.setContent(button); // works sometimes but imperfect
  
  
                              }
                          });
  
                          log.info("Swing thread");
                          log.info("Preferred width is now = {}", button.getPreferredSize().getWidth());
                          log.info("Bounds width is now = {}", button.getBounds().getWidth());
  
                      }
                  }).start();
  
              }
          });
  
      }
  
      public static void main(String[] args) {
          launch(args);
      }
  
  }
  </code></pre>