当前位置: 首页 > 知识库问答 >
问题:

如何在JavaFX中使StackPane填充BorderPane

苏昂雄
2023-03-14

我有一个简单的JavaFX类,对于这个问题,它的结构是这样的。

BorderPane
     StackPane
         FlowPane

BorderPane包含包含FlowPane的StackPane。

几天来,我一直试图让StackPane填充其父级BorderPane,但似乎没有任何效果。最终结果应该是StackPane的背景设置为“红色”。

代码:

import javafx.application.Application;
import javafx.geometry.Orientation;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Region;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

/**
 *
 * @author A4XX-COLCRI
 */
public class LogicGatesSimulator extends Application {
    /**
     * The root node of the application.
     */
    Group root;
    /**
     * This is the top-level container child of root.
     */
    BorderPane mainContainer;
    /**
     * Contains the canvas and represents the drawing area.
     */
    Pane canvasContainer;
    /**
     * Defines where all the shapes will be drawn.
     */
    Canvas canvas;
    /**
     * Defines the toolbox pane.
     */
    StackPane toolboxPane;
    /**
     * Defines the toolbox flowpane.
     */
    FlowPane toolbox;
    /**
     * Defines the top bar menu.
     */
    MenuBar menu;


    @Override
    public void start(Stage primaryStage) {
        // Inizializzazione degli elementi grafici
        root = new Group();
        mainContainer = new BorderPane();
        canvasContainer = new Pane();
        canvas = new Canvas();
        toolboxPane = new StackPane();
        toolboxPane.setStyle("-fx-background-color: red; ");
        toolbox = new FlowPane(Orientation.VERTICAL);
        toolbox.setPrefWrapLength(250);
        toolbox.minWidth(Region.USE_COMPUTED_SIZE);
        toolbox.minHeight(Region.USE_COMPUTED_SIZE);
        toolbox.maxWidth(Region.USE_COMPUTED_SIZE);
        toolbox.maxHeight(Region.USE_COMPUTED_SIZE);
        toolbox.prefHeight(Region.USE_COMPUTED_SIZE);
        //toolbox.setStyle("-fx-background-color: red;");

        // Inizializzazione scena
        Scene scene = new Scene(root, 1280, 800);
        primaryStage.setTitle("Logic Gates Simulator");
        primaryStage.setScene(scene);

        // Menu
        menu = new MenuBar();
        Menu menuFile = new Menu("File");
        Menu menuEdit = new Menu("Edit");
        Menu menuView = new Menu("View");
        Menu menuAbout = new Menu("About");
        menu.getMenus().addAll(menuFile, menuEdit, menuView, menuAbout);

        // Porte logiche nella toolbox 
        ImageView andImage = new ImageView(getClass().getResource("images/and.png").toExternalForm());
        ImageView nandImage = new ImageView(getClass().getResource("images/nand.png").toExternalForm());
        ImageView orImage = new ImageView(getClass().getResource("images/or.png").toExternalForm());
        ImageView norImage = new ImageView(getClass().getResource("images/nor.png").toExternalForm());
        ImageView xorImage = new ImageView(getClass().getResource("images/xor.png").toExternalForm());
        ImageView xnorImage = new ImageView(getClass().getResource("images/xnor.png").toExternalForm());
        ImageView notImage = new ImageView(getClass().getResource("images/not.png").toExternalForm());

        // Strutturazione
        toolboxPane.getChildren().add(toolbox);
        mainContainer.setLeft(toolboxPane);
        mainContainer.setRight(canvasContainer);
        toolbox.getChildren().addAll(andImage, nandImage, orImage, norImage, xorImage, xnorImage, notImage);
        canvasContainer.getChildren().add(canvas);
        root.getChildren().add(mainContainer);

        // Mostra la scena
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
}     

我的应用程序正在运行的照片

所以基本上这个左侧区域应该完全填充我的BorderPane的左侧,因此背景应该正确覆盖它的区域。我还尝试将其从StackPane更改为AnchorPane并将其TopAnchor、LeftAnchor等设置为0,但它不起作用。谢谢你。

共有1个答案

曾嘉瑞
2023-03-14

您忽略了结构描述中导致该行为的零件:

< code>Group会将其子组的大小调整为其首选大小。它不可调整大小,因此调整舞台大小不会影响< code>Group或它的任何后代...

只需删除<code>组<code>边框窗格

 类似资料:
  • 我的Java程序产生了很多数据,我用它构建了单个的ResultObject。因为只有某些结果对象会引起兴趣,所以我填充了一个可观察的HashMap 虽然映射和处理这些结果按预期工作,但我很难用该ObservableHashMap填充TableView 我的CustomObject(如果两个CustomObject具有相同的属性,只需检查JSONObject): 我的ObservableHashMa

  • 因此,我试图在我的JavaFX应用程序中创建一个自定义节点,它从扩展而来,因此可以自己进行渲染。我一开始只是试着画一个文本“Hello world”在画布上,但可惜它没有出现,即使我可以通过鼠标事件处理程序确认应用程序中是否存在自定义节点。 简而言之,如果我将这个的一个新实例添加到一个

  • 问题内容: 我想填充与 我只有两列。我做不到 到目前为止,我尝试过的是: 桌上什么也没显示。但是当我进行打印时,我看到的是我添加的数据。但是在桌子上什么也没显示。 我创建列如下: 我在Internet上看到了一些示例,这些示例中创建了一个对象来填充对象,但我不想仅为表视图创建类。还有其他可行的方法吗? 编辑: 我只想拥有这样的东西: 问题答案: 首先,您必须在FXML文件或代码中创建table’c

  • 我试图用列表中的字符串数组动态填充TableView(我想有更好的方法来处理信息,但这是我被赋予的任务…),所以我创建了一个TableView,创建了所有的列和东西,但在填充TableView的时候我迷路了。 列表中有所有的字符串数组,一切似乎都正常工作,任何数组上都没有MissPlated数据或类似的东西,当我运行项目时,列名按照我希望的方式出现,列表中的每个数组在tableview上都有一行,

  • 问题内容: 我对Java,JavaFX和编程一般还是有点陌生​​,但是我遇到的问题困扰着我。 在大多数教程中,我查找了有关填充ListView(更具体地说,使用ObservableArrayList)的方法,最简单的方法是从String的ObservableList中创建它,如下所示: 但是我不想使用字符串。我想使用我制作的名为Words的自定义对象: 每个Word对象只有两个属性:wordStr

  • 我对Java、JavaFX和一般编程都有点陌生,我有一个问题让我大吃一惊。 在我查阅的大多数关于填充ListView(更具体地说,使用ObservableArrayList)的教程中,最简单的方法是从字符串的ObservableList创建它,如下所示: 但我不想用字符串。我想使用我制作的一个名为Words的自定义对象: 要明确的是,这不是android的,单词列表最终会被更改、保存和加载,所以我