使用GridLayout时,是否可以将组件添加到特定网格单元?

Rom*_*man 25 java layout user-interface swing jpanel

当我将GridLayout设置为JPanel然后添加内容时,它随后以"文本顺序"(从左到右,从上到下)添加.但我想在特定单元格中添加一个元素(在第j列的第i行).可能吗?

Rob*_*ser 44

不,您无法在特定单元格中添加组件.您可以做的是添加空的JPanel对象并在数组中保持对它们的引用,然后以您想要的任何顺序向它们添加组件.

就像是:

int i = 3;
int j = 4;
JPanel[][] panelHolder = new JPanel[i][j];    
setLayout(new GridLayout(i,j));

for(int m = 0; m < i; m++) {
   for(int n = 0; n < j; n++) {
      panelHolder[m][n] = new JPanel();
      add(panelHolder[m][n]);
   }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以直接添加到其中一个JPanel对象:

panelHolder[2][3].add(new JButton("Foo"));
Run Code Online (Sandbox Code Playgroud)

  • 或者,如果你不依赖于`GridLayout`,你可以使用[`GridBagLayout`](http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html) (3认同)

Tim*_*rax 5

    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(2,2,1,1));
    JButton component= new JButton("Component");
    panel.add(component, 0,0 );
Run Code Online (Sandbox Code Playgroud)

创建面板并设置其布局.
new GridLayout(numberOfRows,numberOfColums,Horizo​​ntalGap,VerticleGap)

(new GridLayout(2,2,1,1))=>这里我想要2行,2列,
- 如果有任何水平间隙(HGap),它们应该是1px( 1单位)
- 我也想要相同的垂直间隙,所以我做垂直间隙(VGap).即1个单位
- 在这种情况下; gap => spacing/margin/padding - 就是这个意义上的.

创建组件并将它们添加到面板
- (组件,0,0)=> 0,0是行和列..(类似于2d数组).@row 0&@column 0或在第0行和第0列的交叉点
指定组件的位置,将行和列放在应该去的位置.
每个单元格都有一个位置== [row] [column]

或者你可以不用hgaps和vgaps来做到这一点:

    JPanel panel = new JPanel();        
    panel.setLayout(new GridLayout(2,2));
    JButton component= new JButton("Component");
    panel.add(component, 0,0 );
Run Code Online (Sandbox Code Playgroud)

  • 关于这两个例子,如果我使用 `panel.add(component, 1,1 );`,我会得到 `Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException:非法组件位置` (3认同)