gpt4 book ai didi

java - 在 JavaFX 中设置 stackPane 大小

转载 作者:行者123 更新时间:2023-11-30 06:06:50 25 4
gpt4 key购买 nike

我想要一个堆栈 Pane 来模拟全高清显示器,即 1920x1080。

为此,我使用 640x360,它遵循相同的比例,然后使用以下方法缩放 stackPane(称为“屏幕”)内的图像节点:

image.getWidth()/(fullWidth/screen.getWidth())), 

image.getHeight()/(fullHeight/screen.getHeight()))

这工作得很好,唯一的问题是我无法设置“屏幕”的大小,因此它在底部和顶部保留大黑条。

正如您在下图中看到的,“屏幕”周围有一个白色边框,以使黑条更容易注意到。

screen snapshot

下面是创建堆栈 Pane 并处理它的代码:

DisplayPane构造方法

public DisplayPane(TemporalViewPane temporalViewPane, SteveMenuBar steveMenuBar, SpatialTemporalView spatialTemporalView){

setId("display-pane");

screen = new StackPane();
screen.setId("screen-pane");


controlButtonPane = new ControlButtonPane(screen, temporalViewPane, steveMenuBar, spatialTemporalView);


setCenter(screen);
setBottom(controlButtonPane);

}

ControlButtonPane构造函数类方法:

public ControlButtonPane(StackPane screen, TemporalViewPane temporalViewPane,SteveMenuBar steveMenuBar, SpatialTemporalView spatialTemporalView){

fullHDLabel = new Label("FullHD");
fullHDLabel.setPadding(new Insets(5,5,5,5));
screen.getChildren().add(fullHDLabel);

setId("control-button-pane");
this.steveMenuBar = steveMenuBar;
this.screen = screen;
this.screen.setAlignment(Pos.TOP_LEFT);
this.temporalViewPane = temporalViewPane;
this.spatialTemporalView = spatialTemporalView;
this.webView = new WebView();

createButtons();
setLeft(fullButtonPane);
setLeft(fullHDLabel);
setCenter(centerButtonPane);
setRight(refreshButtonPane);

createListeners();
createButtonActions();


}

创建按钮方法:

public void createButtons(){


run = new Button();
run.setDisable(true);
run.setId("run-button");
run.setTooltip(new Tooltip(Language.translate("run")));

play = new Button();
play.setDisable(true);
play.setId("play-button");
play.setTooltip(new Tooltip(Language.translate("play")));

pause = new Button();
pause.setDisable(true);
pause.setId("pause-button");
pause.setTooltip(new Tooltip(Language.translate("pause")));

stop = new Button();
stop.setDisable(true);
stop.setId("stop-button");
stop.setTooltip(new Tooltip(Language.translate("stop")));

centerButtonPane = new HBox();
centerButtonPane.setId("center-button-pane");
centerButtonPane.getChildren().add(run);
centerButtonPane.getChildren().add(play);
centerButtonPane.getChildren().add(pause);
centerButtonPane.getChildren().add(stop);


}

创建监听器方法:

private void createListeners(){


screen.widthProperty().addListener((obs, oldVal, newVal) -> {
if(newVal != oldVal){
screen.minHeightProperty().bind(screen.widthProperty().multiply(0.565));
screen.maxHeightProperty().bind(screen.widthProperty().multiply(0.565));
System.out.println("NEW WIDTH OF SCREEN IS: "+newVal);
}

});

screen.heightProperty().addListener((obs, oldVal, newVal) -> {
if(newVal != oldVal){
screen.minHeightProperty().bind(screen.widthProperty().multiply(0.565));
screen.maxHeightProperty().bind(screen.widthProperty().multiply(0.565));
System.out.println("NEW HEIGHT OF SCREEN IS: "+newVal);
}

});

下面是我想要实现的目标。目前,我必须运行该应用程序,然后拖动堆栈 Pane 的一侧以按应有的方式调整其大小。

how it should be snapshot

我已经尝试了所有设置的最小/最大/首选高度/宽度,但仍然无法实现我的目标。我不知道还能做什么。

任何帮助都会很棒。

最佳答案

问题是我将高度绑定(bind)到宽度,而实际上应该是相反的方式,因为宽度可以调整得更大而不浪费屏幕空间。

所以我将绑定(bind)更改为:

private void createListeners(){


screen.widthProperty().addListener((obs, oldVal, newVal) -> {
if(newVal != oldVal){
screen.minWidthProperty().bind(screen.heightProperty().multiply(1.77778));
screen.maxWidthProperty().bind(screen.heightProperty().multiply(1.77778));
System.out.println("NEW WIDTH OF SCREEN IS: "+newVal);
}

});

screen.heightProperty().addListener((obs, oldVal, newVal) -> {
if(newVal != oldVal){
screen.minWidthProperty().bind(screen.heightProperty().multiply(1.77778));
screen.maxWidthProperty().bind(screen.heightProperty().multiply(1.77778));
System.out.println("NEW HEIGHT OF SCREEN IS: "+newVal);
}

});
}

关于java - 在 JavaFX 中设置 stackPane 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51115402/

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