【发布时间】:2015-07-27 13:04:56
【问题描述】:
我的任务是制作 JavaFX 应用程序。当我启动它时,窗口应该从屏幕右侧平滑滑动,当我点击“x”按钮时,它应该滑到右侧然后结束。
我发现可以为此使用简单的时间轴动画。当我运行应用程序时,我让窗口滑入,但不知道如何滑出窗口。
我尝试通过阶段的 setOnCloseRequest() 方法来处理这个定义处理程序,但遇到了两个问题:
- 无法实现动画
- 点击“x”后应用程序立即关闭,即使我使用 Window 事件的 consume() 方法
代码:
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage stage) {
stage.setTitle("Main");
Group root = new Group();
Scene scene = new Scene(root, 300, 250);
stage.setScene(scene);
Rectangle2D primScreenBounds = Screen.getPrimary().getVisualBounds();
stage.setX(primScreenBounds.getMinX() + primScreenBounds.getWidth());
System.out.println(primScreenBounds.getWidth());
stage.setY(primScreenBounds.getMinY());
stage.setWidth(0);
stage.setHeight(primScreenBounds.getHeight());
Timeline timeline = new Timeline();
timeline.setAutoReverse(true);
WritableValue<Double> writableWidth = new WritableValue<Double>() {
@Override
public Double getValue() {
return stage.getWidth();
}
@Override
public void setValue(Double value) {
stage.setWidth(value);
}
};
KeyValue kv = new KeyValue(writableWidth, 600d);
KeyFrame kf = new KeyFrame(Duration.millis(3000), kv);
timeline.getKeyFrames().addAll(kf);
timeline.play();
stage.show();
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
event.consume();
}
});
}
}
【问题讨论】: