Могу ли я добавить компонент в конкретную ячейку сетки, когда используется GridLayout? - PullRequest
25 голосов
/ 24 марта 2010

Когда я устанавливаю GridLayout в JPanel и затем что-то добавляю, он добавляется впоследствии в «текстовом порядке» (слева направо, сверху вниз). Но я хочу добавить элемент в определенную ячейку (в i-й строке в j-м столбце). Возможно ли это?

Ответы [ 2 ]

43 голосов
/ 24 марта 2010

Нет, вы не можете добавлять компоненты в определенную ячейку. Что вы можете сделать, это добавить пустые объекты 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"));
5 голосов
/ 06 августа 2016

Да

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

Создайте панель и настройте ее макет.
new GridLayout (numberOfRows, numberOfColums, HorizontalGap, VerticleGap)

(new GridLayout (2,2,1,1)) => здесь я хочу 2 строки, 2 столбца,
- если есть горизонтальные пробелы (HGap), они должны быть 1px (1unit)
- I также хочу то же самое для вертикальных промежутков, поэтому я делаю то же самое как вертикальные промежутки (VGap). т.е. 1 единица
- в этом случае; промежутки => интервалы / поля / отступы - в этом смысле.

Создайте свои компоненты и добавьте их на панель
- (component, 0,0) => 0,0 - строка и столбец .. (как 2d-массив). @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 );
...