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

如何使用GridPane JavaFX使按钮跨越多个列/行?

武峻熙
2023-03-14

我是JavaFX新手,正在尝试用GridPane做一个简单的按钮设计。

我不知道如何让一个按钮跨越多个列/行,而不把其他按钮推开。我一直在使用HBox和VBox将其他按钮组合在一起。我试过在按钮上设置Rowspan,但似乎不起作用。

看起来怎么样

我希望它看起来怎么样

这是我的代码

import javafx.stage.*;
import javafx.application.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;

public class SimpleGUI extends Application {
 public void start(Stage primaryStage) throws Exception {
  GridPane root = new GridPane();
  Scene scene = new Scene(root, 200, 200);

   //Buttons
   Button b1 = new Button("KNAPP 1");
   Button b2 = new Button("KNAPP 2");
   Button b3 = new Button("KNAPP 3");
   Button b4 = new Button("KNAPP 4");
   Button b5 = new Button("KNAPP 5");
   Button b6 = new Button("KNAPP 6");

   //Horizontal Box
   HBox topButtons = new HBox();
   topButtons.getChildren().add(b1);
   topButtons.getChildren().add(b2);
   topButtons.getChildren().add(b3);

   //Vertical Box
   VBox leftButtons = new VBox();
   leftButtons.getChildren().add(b4);
   leftButtons.getChildren().add(b5);

   //Placement
   GridPane.setConstraints(topButtons, 0,0);
   GridPane.setConstraints(leftButtons, 0,1);
   GridPane.setConstraints(b6, 1,1);

   //Length (3 Columns, 2 Rows)
   GridPane.setColumnSpan(topButtons, 3);
   GridPane.setRowSpan(leftButtons, 2);

   //Add them to the stage
   root.getChildren().add(topButtons);
   root.getChildren().add(leftButtons);
   root.getChildren().add(b6);

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

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

共有1个答案

萧琛
2023-03-14

因为您使用的是网格窗格,所以实际上不需要HBoxVBox

import javafx.stage.*;
import javafx.application.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;

public class SimpleGUI extends Application {
 public void start(Stage primaryStage) throws Exception {
  GridPane root = new GridPane();
  Scene scene = new Scene(root);

   //Buttons
   Button b1 = new Button("KNAPP 1");
   Button b2 = new Button("KNAPP 2");
   Button b3 = new Button("KNAPP 3");
   Button b4 = new Button("KNAPP 4");
   Button b5 = new Button("KNAPP 5");
   Button b6 = new Button("KNAPP 6");

   root.add(b1, 0, 0);
   root.add(b2, 1, 0);
   root.add(b3, 2, 0);

   root.add(b4, 0, 1);
   root.add(b5, 0, 2);

   // node, columnIndex, rowIndex, columnSpan, rowSpan:
   root.add(b6, 1, 1, 2, 2);

   // allow button to grow:
   b6.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);

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

 public static void main(String[] args){
  launch(args);
 }
}
 类似资料:
  • 问题内容: 我试图弄清楚如何用Bootstrap做下面的网格。 我不确定如何创建跨越两行的框(数字1)。这些框按照其排列顺序以编程方式生成。方框1是欢迎消息。 关于最佳方法的任何想法吗? 问题答案: 对于Bootstrap 3: 对于Bootstrap 2:

  • 我有一个Java程序,需要在多个类的多个点上从控制台获取用户输入。我试着在每节课上使用一台扫描仪,但当我关闭一台扫描仪时,它会关闭系统。所以我想在整个程序中使用相同的扫描仪。我在主类中打开了扫描仪,但在其他类中如何使用相同的扫描仪?

  • 问题内容: 我有1个活动按钮。我想将此1按钮用于多个任务。 那我该怎么办? 如果我第一次按此按钮,则更改为2按钮 如果我按了第二次,那么它将更新我的数据 但是第一次只能工作第二次不能工作 看看我的代码我尝试了什么 您可以看到我的上面的代码,我可以使用按钮执行2个任务,但是只更改两个按钮,我将更改数据并单击按钮,然后它就无法执行 问题答案: 尝试这种方式,首先在活动类文件上声明全局变量,如下所示:

  • 问题内容: 我正在尝试使列范围可用。具体来说,我正在寻找一个嵌套在另一个内部的方法,当用户单击以查看嵌套表时,它应该展开以向下推动下面的行并填充空白处。这类似于您在MS Access中可以嵌套表的情况,单击行上的“展开”按钮将向您显示嵌套表中的相应条目。 如果有人知道使用进行列跨度的方法,您能指出我正确的方向吗?或者,如果您知道执行此操作的其他方法,则欢迎您提出建议。该应用程序是使用Swing构建

  • 所以我试图去有一个交错的布局,但列表中的第一项需要跨越两列。前两排也是固定高度。除了跨越两列的第一个项目,其他都正常工作。 我将RecyclerView.Adapter与StaggeredGridLayoutManager一起使用。它似乎不是开箱即用的功能。我假设我可以制作一个自定义布局管理器,但我不知道从哪里开始。我尝试过搜索,但我找不到任何关于如何让项目跨越多列的信息。 下图是我在列表中寻找的