我正在尝试将窗口的最小高度设置为其包含的场景的高度+标题栏高度(因此在显示窗口后,不可能将其缩小更多)。在this回答后,我写道:
SELECT AcquistionDate = CONVERT(NVARCHAR,
CASE
WHEN D.CalendarDate NOT IN ('01/01/1900','12/31/9999')
THEN D.CalendarDate
WHEN ac.FirstAccountOpenDate NOT IN ('01/01/1900', '12/31/9999')
THEN ac.FirstAccountOpenDate
END, 126) + 'Z
from TABLE;
它似乎不起作用,因为当事件被触发时,窗口甚至没有显示在屏幕上,并且它的高度仍然等于场景的高度(标题栏没有被考虑)。我的问题是 - 当窗口实际上在屏幕上可见时如何运行代码?
答案 0 :(得分:0)
您可以强制布置场景的根,然后将舞台调整为场景的大小:
stage.setOnShown(e -> {
stage.getScene().getRoot().layout();
stage.sizeToScene();
stage.setMinHeight(stage.getHeight());
});
这是一个SSCCE:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class StageSizeTest extends Application {
@Override
public void start(Stage primaryStage) {
primaryStage.setOnShown(e -> {
primaryStage.getScene().getRoot().layout();
primaryStage.sizeToScene();
System.out.printf("[%.1f, %.1f]%n", primaryStage.getWidth(), primaryStage.getHeight());
primaryStage.setMinWidth(primaryStage.getWidth());
primaryStage.setMinHeight(primaryStage.getHeight());
});
VBox root = new VBox(10,
new Label("Test one"),
new Label("Another test"),
new Label("Another really long label to give the scene some width"),
new Label("Bottom label"));
root.setPadding(new Insets(10));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}