Установить размер stackPane в JavaFX - PullRequest
0 голосов
/ 30 июня 2018

Я хочу, чтобы панель стека имитировала отображение FullHD, то есть 1920x1080.

Для этого я использую 640x360, который следует той же пропорции, и затем я масштабирую узлы изображения внутри stackPane (который называется "screen"), используя:

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

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

Это работает отлично, единственная проблема - я не могу установить размер для "экрана", поэтому он держит большие черные полосы внизу и сверху.

Как вы можете видеть на изображении ниже, "экран" имеет белую рамку вокруг него, чтобы было легче заметить черные полосы.

снимок экрана

Вот код, который создает панель стека и обрабатывает ее:

Метод конструктора 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();


}

Метод CreateButtons:

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);


}

Метод CreateListeners:

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);
        }

    });

А ниже я хочу достичь. В настоящее время мне нужно запустить приложение, а затем перетащить боковую часть панели стека, чтобы изменить его размер, как и должно быть.

как должен быть снимок

Я перепробовал все установленные min / max / pref height / width и все еще не смог достичь своей цели. Я не знаю, что еще делать.

Любая помощь будет отличной.

1 Ответ

0 голосов
/ 04 июля 2018

Проблема заключалась в том, что я привязывал высоту к ширине, когда она должна быть наоборот, так как ширина может быть изменена намного больше, не тратя место на экране.

Поэтому я изменил привязку на:

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);
    }

});
}
...