2012-05-27 37 views

Respuesta

20

Hay heightProperty y widthProperty. Puede usar estas propiedades para el enlace o agregar oyentes a ellas.

public void start(Stage stage) { 
    Scene scene = new Scene(new Group(), 300, 200); 
    stage.setScene(scene); 

    stage.titleProperty().bind(
      scene.widthProperty().asString(). 
      concat(" : "). 
      concat(scene.heightProperty().asString())); 

    stage.show(); 
} 

O véase el siguiente ejemplo: https://stackoverflow.com/a/9893911/1054140

+0

Sergey, puedes decir si hay una solución para obtener prueba por etapas de cambio de tamaño cuando usuario libera botón izquierdo del ratón? Hay una solución de Chris sin embargo, solo permite disminuir el número de eventos pero no permite obtener solo un evento. –

+0

@PavelK por favor haga una pregunta por separado con más detalles. No entiendo qué es lo que quieres lograr. –

+0

Gracias por su respuesta. Por favor, vea https://stackoverflow.com/questions/44159794/get-single-stage-resize-event-when-user-releases-left-mouse-button –

9

Una manera de realizar una acción después de la modificación del tamaño una escena había terminado usted puede hacer esto:

(Nota: puede haber mejores formas de hacer esto, para mí no fue el trabajo)

final Stage primaryStage = getStage() // get your stage from somewhere 

// create a listener 
final ChangeListener<Number> listener = new ChangeListener<Number>() 
{ 
    final Timer timer = new Timer(); // uses a timer to call your resize method 
    TimerTask task = null; // task to execute after defined delay 
    final long delayTime = 200; // delay that has to pass in order to consider an operation done 

    @Override 
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, final Number newValue) 
    { 
    if (task != null) 
    { // there was already a task scheduled from the previous operation ... 
     task.cancel(); // cancel it, we have a new size to consider 
    } 

    task = new TimerTask() // create new task that calls your resize operation 
    { 
     @Override 
     public void run() 
     { 
     // here you can place your resize code 
     System.out.println("resize to " + primaryStage.getWidth() + " " + primaryStage.getHeight()); 
     } 
    }; 
    // schedule new task 
    timer.schedule(task, delayTime); 
    } 
}; 

// finally we have to register the listener 
primaryStage.widthProperty().addListener(listener); 
primaryStage.heightProperty().addListener(listener); 
+0

Más uno para solución con tarea de temporizador. Muy bueno;) – stviper

+0

¿No haría esto que la aplicación siga ejecutándose después de cerrarla? – Jacks

+0

Gracias por publicar su solución. –

0

esto es demasiado viejo y básico pero podría ayudar a un novato como yo

se puede añadir un detector de anchura y propiedades de altura

stage.heightProperty().addListener(e ->{ 
    handle.... 
}); 

stage.widthProperty().addListener(e ->{ 
    handle.... 
}); 
Cuestiones relacionadas