2012-05-27 39 views

Trả lời

20

heightPropertywidthProperty. Bạn có thể sử dụng các thuộc tính này để ràng buộc hoặc thêm người nghe vào chúng.

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(); 
} 

Hoặc xem ví dụ sau: https://stackoverflow.com/a/9893911/1054140

+0

Sergey, bạn có thể nói nếu có một giải pháp để có được sự kiện giai đoạn thay đổi kích thước khi phát hành sử dụng nút chuột trái? Có một giải pháp từ Chris tuy nhiên nó chỉ cho phép giảm số lượng sự kiện nhưng không cho phép chỉ có một sự kiện. –

+0

@PavelK vui lòng tạo câu hỏi riêng với nhiều chi tiết hơn. Tôi không hiểu bạn muốn đạt được điều gì. –

+0

Cảm ơn bạn đã trả lời. Vui lòng xem https://stackoverflow.com/questions/44159794/get-single-stage-resize-event-when-user-releases-left-mouse-button –

9

Một cách để thực hiện một hành động sau khi tái định cỡ một cảnh đã được hoàn tất, bạn có thể làm điều này:

(Lưu ý: Có cách nào có thể tốt hơn để làm điều này, đối với tôi nó đã thực hiện công việc)

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

Thêm một giải pháp cho giải pháp với tác vụ hẹn giờ. Rất đẹp;) – stviper

+0

Điều này có khiến ứng dụng vẫn chạy sau khi đóng ứng dụng không? – Jacks

+0

Cảm ơn bạn đã đăng giải pháp của mình. –

0

quá cũ và cơ bản nhưng nó có thể giúp ích cho tôi như tôi

bạn có thể thêm một người biết lắng nghe với chiều rộng và chiều cao tính

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

stage.widthProperty().addListener(e ->{ 
    handle.... 
}); 
Các vấn đề liên quan