gpt4 book ai didi

JavaFX 8 : Stage insets (window decoration thickness)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:13:15 24 4
gpt4 key购买 nike

如何确定 JavaFX 中的舞台/窗口插图?在 Swing 中我可以简单地写:

JFrame frame = new JFrame();
Insets insets = frame.getInsets();

在 JavaFX 中获取边框大小和窗口标题栏的等效项是什么?

最佳答案

您可以通过查看相对于窗口宽度和高度的场景边界来确定这些。

给定一个 Scene scene; , scene.getX()scene.getY()给出 Scene 的 x 和 y 坐标窗口内。它们分别相当于左侧和顶部插图。

右侧和底部稍微有点棘手,但是

scene.getWindow().getWidth()-scene.getWidth()-scene.getX()

给出正确的插图,类似地

scene.getWindow().getHeight()-scene.getHeight()-scene.getY()

给出底部插图。

当然,只有当场景被放置在窗口中并且窗口在屏幕上可见时,这些值才有意义。

如果你真的想要 Insets object 你可以做类似下面的事情(如果边框或标题栏在窗口显示后改变大小,它甚至会保持有效):

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.ObjectBinding;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class WindowInsetsDemo extends Application {

@Override
public void start(Stage primaryStage) {

Label topLabel = new Label();
Label leftLabel = new Label();
Label rightLabel = new Label();
Label bottomLabel = new Label();


VBox root = new VBox(10, topLabel, leftLabel, bottomLabel, rightLabel);
root.setAlignment(Pos.CENTER);

Scene scene = new Scene(root, 600, 400);


ObjectBinding<Insets> insets = Bindings.createObjectBinding(() ->
new Insets(scene.getY(),
primaryStage.getWidth()-scene.getWidth() - scene.getX(),
primaryStage.getHeight()-scene.getHeight() - scene.getY(),
scene.getX()),
scene.xProperty(),
scene.yProperty(),
scene.widthProperty(),
scene.heightProperty(),
primaryStage.widthProperty(),
primaryStage.heightProperty()
);

topLabel.textProperty().bind(Bindings.createStringBinding(() -> "Top: "+insets.get().getTop(), insets));
leftLabel.textProperty().bind(Bindings.createStringBinding(() -> "Left: "+insets.get().getLeft(), insets));
rightLabel.textProperty().bind(Bindings.createStringBinding(() -> "Right: "+insets.get().getRight(), insets));
bottomLabel.textProperty().bind(Bindings.createStringBinding(() -> "Bottom: "+insets.get().getBottom(), insets));

primaryStage.setScene(scene);
primaryStage.show();
}

public static void main(String[] args) {
launch(args);
}
}

关于JavaFX 8 : Stage insets (window decoration thickness)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26711474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com