title: How to make canvas Resizable in javaFX?
body: <p>In javaFX to resize a canvas there is no such method to do that, the only solution is to extends from Canvas.</p>
  
  <pre><code>class ResizableCanvas extends Canvas {
  
      public ResizableCanvas() {
          // Redraw canvas when size changes.
          widthProperty().addListener(evt -&gt; draw());
          heightProperty().addListener(evt -&gt; draw());
      }
  
      private void draw() {
          double width = getWidth();
          double height = getHeight();
  
          GraphicsContext gc = getGraphicsContext2D();
          gc.clearRect(0, 0, width, height);
  
      }
  
      @Override
      public boolean isResizable() {
          return true;
      }
  }
  </code></pre>
  
  <p>is extends from Canvas is the only solution to make canvas Resizable ?
  because this solution work only if we don't want to use FXML, if we declare in fxml a canvas how can we make it resizable?</p>
  
  <p>this is my code :</p>
  
  <pre><code>package sample;
  
  import javafx.application.Application;
  import javafx.fxml.FXMLLoader;
  import javafx.scene.Scene;
  import javafx.scene.canvas.GraphicsContext;
  import javafx.scene.layout.AnchorPane;
  import javafx.scene.paint.Color;
  import javafx.stage.Stage;
  
  public class Main extends Application {
  
      Controller controller;
  
      @Override
      public void start(Stage primaryStage) throws Exception{
          FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml"));
          AnchorPane root = loader.load(); // controller initialized
          controller = loader.getController();
          GraphicsContext gc = controller.canvas.getGraphicsContext2D();
          gc.setFill(Color.AQUA);
          gc.fillRect(0, 0, root.getPrefWidth(), root.getPrefHeight());
          primaryStage.setTitle("Hello World");
          primaryStage.setScene(new Scene(controller.Pane, controller.Pane.getPrefWidth(), controller.Pane.getPrefHeight()));
          primaryStage.show();
      }
  
      public static void main(String[] args) {
          launch(args);
      }
  }
  </code></pre>