GridPane 布局调试行在调用 setGridLinesVisible(true) 时未按预期显示

2022-09-04 03:28:59

我正在尝试在JavaFX中显示GridPane场景的网格线,但是尽管调用了,但它们并没有显示出来。我做错了什么?setGridLinesVisible(true)

我想在程序的主菜单上显示网格线,这样我就可以知道在哪里放置节点。不幸的是,当我运行该程序时,显示的只是一个带有单个按钮的空白屏幕。

我的主菜单类:

package screens;

import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;

/**
 * Creates the main menu Pane object and returns it.
 * @author LuminousNutria
 */
public class MainMenu {

   public MainMenu() {}

   public Pane getPane() {
      GridPane grid = new GridPane();
      grid.setGridLinesVisible(true);

      Button bttn = new Button("button");
      grid.add(bttn, 2, 2);

      return grid;
   }
}

我的主类:

package mainPackage;

import screens.*;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;

/**
 * Displays the Pane.
 * @author LuminousNutria
 */
public class Main extends Application {

   // create main menu Pane
   private Pane mainMenu = new MainMenu().getPane();

   // create Scene
   private Scene scene = new Scene(mainMenu, 1600, 900);

   @Override
   public void start(Stage stage) {

      stage.setScene(scene);
      stage.show();
   }

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

显示如下: enter image description here


答案 1

JavaFX 的 GridPane 类将只创建程序员在网格上设置对象位置时所定义的点数。

例如,如果将对象添加到网格中,其中 x 和 y 位置均等于 0,则该网格将只有一个 (x, y) 位置,即 (0, 0)。

此外,即使网格有很多位置,除非程序员设置和网格属性,否则网格的所有“位置”都将位于程序创建的窗口中的同一点上。HGapVgap

问题是我没有调整 and 属性,因此整个网格仅聚类在窗口中的一个点上。这使得无法看到任何线条。HGapVGap

用下面的代码替换该方法使我可以看到网格线。getPane()

public Pane getPane() {
  GridPane grid = new GridPane();
  grid.setGridLinesVisible(true);
  grid.setVgap(8);
  grid.setHgap(8);

  Button btn = new Button("button");
  grid.add(btn, 5, 5);

  return grid;
}

这是我修复程序后显示的内容。

enter image description here


答案 2

推荐