在学习JavaFX的时候你发现可以设置场景的高度和宽度,可以设置HBox中节点之间的间距,等等类似的方面。我的问题是关于这些值的单位。例如,在这个简单的代码中:
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class TestGUI extends Application{
@Override
public void start(Stage primaryStage) {
Button btn1 = new Button("OK");
Button btn2 = new Button("Cancel");
HBox root = new HBox(15,btn1,btn2);
root.setAlignment(Pos.CENTER);
Scene scene = new Scene(root,250,50);
primaryStage.setScene(scene);
primaryStage.setTitle("GUI Example");
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
250、50、15的单位是什么?
它们以像素为单位,受高 DPI 显示器的缩放因子的影响。
来自 Node 的文档:
在设备像素级别,整数坐标映射到像素和像素中心之间的角和裂缝出现在整数像素位置之间的中点处。因为所有坐标值都是用浮点数指定的,所以坐标可以精确地指向这些角(当浮点值具有精确的整数值时)或像素上的任何位置。例如,坐标 (0.5, 0.5) 将指向舞台上左上像素的中心。同样,位于 (0, 0) 且尺寸为 10 x 10 的矩形将从舞台上左上角像素的左上角跨越到第 10 条扫描线上第 10 个像素的右下角。该矩形内最后一个像素的像素中心位于坐标 (9.5, 9.5) 处。
对于比例因子,请参见:
其中指出:
窗口将在渲染和合成输出到屏幕或其他目标设备的所有阶段中应用于水平场景坐标的比例。
类似地,垂直坐标也存在 OutputScaleY。
还: