【发布时间】:2012-06-02 03:11:48
【问题描述】:
如何在 JavaFX 2.1 中检测场景或舞台的大小何时发生变化?我找不到任何事件处理程序。
【问题讨论】:
标签: javafx-2
如何在 JavaFX 2.1 中检测场景或舞台的大小何时发生变化?我找不到任何事件处理程序。
【问题讨论】:
标签: javafx-2
这太老了,太基础了,但它可能会帮助像我这样的菜鸟
您可以为宽度和高度属性添加监听器
stage.heightProperty().addListener(e ->{
handle....
});
stage.widthProperty().addListener(e ->{
handle....
});
【讨论】:
一种在场景完成调整大小后执行操作的方法,您可以这样做:
(注意:可能有更好的方法可以做到这一点,对我来说它完成了这项工作)
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);
【讨论】:
有heightProperty 和widthProperty。您可以使用这些属性进行绑定,或向它们添加侦听器。
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();
}
【讨论】: