In javaFX per ridimensionare una tela non esiste un tale metodo per farlo, l'unica soluzione è estendere da Canvas.Come rendere la tela ridimensionabile in javaFX?
class ResizableCanvas extends Canvas {
public ResizableCanvas() {
// Redraw canvas when size changes.
widthProperty().addListener(evt -> draw());
heightProperty().addListener(evt -> 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;
}
}
si estende dalla tela di canapa è l'unica soluzione per fare tela ridimensionabile? perché questa soluzione funziona solo se non vogliamo usare FXML, se dichiariamo in fxml una tela come possiamo renderla ridimensionabile?
questo è il mio codice:
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);
}
}
Perché questa soluzione non funziona se usi FXML? –
se uso la soluzione, influenzerò l'oggetto della classe su tela di FXML, la tela sarà ridimensionabile ma quando compilo il codice la tela non è visibile non so perché. – HinoHara
Guardando il tuo codice ... Penso che probabilmente 'root.getPrefWidth()' e 'root.getPrefHeight()' non stanno dando quello che ti aspetti. Per provare, basta provare a codificare qualcosa e vedere se funziona. Inoltre, stai impostando la larghezza e l'altezza della tela in FMXL? –