使用GridLayout时可以向特定网格单元添加组件吗?

问题描述 投票:0回答:2

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

java user-interface swing layout jpanel
2个回答
48
投票

不可以,您无法在特定单元格添加组件。您可以做的是添加空的 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]);
   }
}

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

panelHolder[2][3].add(new JButton("Foo"));

8
投票

是的

    import java.awt.GridLayout //Grid layout from awt docs.oracle.com/javase/7/docs/api/java/awt/GridLayout.html

    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(2,2,1,1));
    JButton component= new JButton("Component");
    panel.add(component, 0,0 );

创建面板并设置其布局。
新的GridLayout(行数,列数,水平间隙,垂直间隙)

(new GridLayout(2,2,1,1)) => 这里我想要 2 行,2 列,
- 如果有任何水平间隙 (HGap),它们应该是 1px (1unit)
- 我也想要相同的垂直间隙间隙,所以我做与垂直间隙(VGap)相同的事情。即1个单位
- 在这种情况下;间隙 => 间距/边距/填充——从这个意义上说。

创建组件并将其添加到面板中
- (component, 0,0 ) => 0,0 是行和列..(就像二维数组)。 @row 0 & @column 0 或位于第 0 行和第 0 列的交叉点
通过将行和列放在应该放置的位置来指定组件的放置位置。
每个单元格都有一个位置 == [行][列]

或者你可以在没有 hgaps 和 vgaps 的情况下完成:

    JPanel panel = new JPanel();        
    panel.setLayout(new GridLayout(2,2));
    JButton component= new JButton("Component");
    panel.add(component, 0,0 );
© www.soinside.com 2019 - 2024. All rights reserved.