我试图弄清楚如何使我的边界窗格内的 VBox 与 BorderPane/Stage 一起扩展,但仍保持在某个范围内

问题描述

我想弄清楚如何制作我的 VBox,只能达到 300 像素宽的大小,但我希望在程序初始化时将其设置为 250 像素宽,然后当用户单击全屏时,我希望它扩展,但不一定要扩展它本来的整个空间。我希望它只能达到 300 像素(并且里面的 3 个按钮做同样的事情),但我不知道如何做到这一点。我无法确定 PrefSize 和 CompSize 的实际含义和用途。任何帮助都会很棒。

我也遇到了与标签相同的问题,在 HBox 内,在 SplitPane 内,在 borderpane 内。任何关于为什么你的建议会起作用的解释,都会帮助我解决这样的未来问题。谢谢

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.borderpane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class MainStarUI extends Application {





    @Override
    public void start(Stage primaryStage){


        MenuBar mainMenuOne = addMenuBar();
        VBox leftVBoxOne = addVBox();
        //AnchorPane midPaneOne = addAnchorPane();
        //HBox topHBoxOne = addHBox();
        SplitPane midSplitPane = addSplitPane();

        borderpane mainPane = new borderpane();
        mainPane.setTop(mainMenuOne);
        mainPane.setLeft(leftVBoxOne);
        mainPane.setCenter(midSplitPane);

        primaryStage.setMinWidth(1440);
        primaryStage.setMinHeight(900);
        Scene mainScene = new Scene(mainPane);
        primaryStage.setScene(mainScene);
        primaryStage.show();

    }

    public MenuBar addMenuBar(){
        Menu menuOne = new Menu("File");
        Menu menuTwo = new Menu("Edit");
        Menu menuThree = new Menu("Help");
        Menu menuFour = new Menu("Exit");

        MenuItem menuItemOne = new MenuItem("File");
        MenuItem menuItemTwo = new MenuItem("Open");
        MenuItem menuItemThree = new MenuItem("Exit");

        menuOne.getItems().add(menuItemOne);
        menuOne.getItems().add(menuItemTwo);
        menuFour.getItems().add(menuItemThree);

        MenuBar mainMenuOne = new MenuBar();

        mainMenuOne.getMenus().add(menuOne);
        mainMenuOne.getMenus().add(menuTwo);
        mainMenuOne.getMenus().add(menuThree);
        mainMenuOne.getMenus().add(menuFour);

        mainMenuOne.maxHeight(25);
        mainMenuOne.minHeight(25);


        return mainMenuOne;

    }

    public VBox addVBox(){
        VBox leftVBox = new VBox();
        leftVBox.setMinWidth(300);
        leftVBox.setPrefWidth(300);

        leftVBox.setPadding(new Insets(15));
        leftVBox.setSpacing(20);
        leftVBox.setStyle("-fx-background-color: #336699;");

        Button firstButton = new Button("Ships,Components,Items & Weaponry");
        firstButton.setMinSize(270,270);
        firstButton.setMaxSize(270,270);

        Button secondButton = new Button("Trading,Mining,Refining & Commodities");
        secondButton.setMinSize(270,270);
        secondButton.setMaxSize(270,270);

        Button thirdButton = new Button("Star Systems,Planets,Moons & Locations");
        thirdButton.setMinSize(270,270);
        thirdButton.setMaxSize(270,270);

        leftVBox.getChildren().addAll(firstButton,secondButton,thirdButton);

        return leftVBox;
    }


    public HBox addHBox(){

        Image logoImage = new Image("SCImages/Taktikallogo1.jpg");

        ImageView logoImageView = new ImageView();
        logoImageView.setimage(logoImage);
        logoImageView.setPreserveRatio(false);
        logoImageView.setFitWidth(160);
        logoImageView.setFitHeight(160);
        logoImageView.setSmooth(true);
        logoImageView.setCache(true);

        Label topLabel = new Label("STAR CITIZEN INFONET & DATABASE");
        topLabel.setFont(new Font("Arial",48));
        topLabel.setTextFill(Color.WHITE);
        topLabel.setMinHeight(160);
        topLabel.setMaxHeight(160);


        HBox topHBox = new HBox();
        topHBox.setStyle("-fx-background-color: black");
        topHBox.setMinHeight(180);
        topHBox.setMaxHeight(180);
        topHBox.setPrefWidth(1090);
        topHBox.getChildren().addAll(logoImageView,topLabel);
        topHBox.setPadding(new Insets(10));
        topHBox.setSpacing(10);

        return topHBox;

    }

    public SplitPane addSplitPane(){

        HBox topHBoxOne = addHBox();
        AnchorPane anchorSplitPane = new AnchorPane();

        SplitPane mainSplitPane = new SplitPane();
        mainSplitPane.setorientation(Orientation.VERTICAL);
        mainSplitPane.setDividerPosition(1,200);
        mainSplitPane.setPrefSize(1090,850);
        mainSplitPane.getItems().addAll(topHBoxOne,anchorSplitPane);


        return mainSplitPane;
    }

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

解决方法

我实际上将我的 VBox 放在一个 AnchorPane 中,并将其附加到锚点上,在我设置了我喜欢的高度和宽度后,一切都运行良好。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...