Почему сетка не соблюдает ограничение? - PullRequest
0 голосов
/ 28 января 2020

Я ничего не понимаю с GridBagLayout. Это скриншот для объяснения

enter image description here

Для JTextField "Janvier", gridy = 0, gridx = 1 and **gridwidth = 5**

Для JTextField "Février", gridy = 0, gridx = 5 and gridwidth = 4

Для номер недели 1, 2, 3 and 4 : gridy = 1, gridx = 0, 1, 2 and 3, and gridwidth = 1

Для номера недели 5 : gridy = 1, gridx = 4 and gridwidth = 2.

На самом деле, я хотел бы иметь 5-ю неделю под JTextField "Janvier" и "Février".

Что вы думаете об этом? я что-то забыл?

Спасибо.

РЕДАКТИРОВАТЬ: извините, я сделал ошибку в объяснении. Первый JTextField "Janvier" имеет gridx = 0.

Это новый скриншот с кодом: введите описание изображения здесь

            JPanel pan = new MyGridBagPan();
            GridBagConstraints c = new GridBagConstraints();
            c.fill = GridBagConstraints.BOTH;
            c.gridheight = 1;
            c.gridwidth = 5;
            c.gridx = 0;
            c.gridy = 0;

            JTextField field = new MyLeftField("Janvier", "", 5, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
            pan.add(field, c);
            c.gridwidth = 1;
            c.gridx = 0;
            c.gridy++;
            field = new MyLeftField("1", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false); 
            pan.add(field, c);
            c.gridx++;          
            field = new MyLeftField("2", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false); 
            pan.add(field, c);
            c.gridx++;          
            field = new MyLeftField("3", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false); 
            pan.add(field, c);
            c.gridx++;          
            field = new MyLeftField("4", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false); 
            pan.add(field, c);
            c.gridy = 0;
            c.gridx = 5;            
            c.gridwidth = 5;
            field = new MyLeftField("Février", "", 0, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false);
            pan.add(field, c);
            c.gridwidth = 2;
            c.gridx = 4;
            c.gridy = 1;
            field = new MyLeftField("5", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false); 
            pan.add(field, c);
            c.gridwidth = 1;
            c.gridx+=2;         
            field = new MyLeftField("6", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false); 
            pan.add(field, c);
            c.gridx++;          
            field = new MyLeftField("7", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false); 
            pan.add(field, c);
            c.gridx++;          
            field = new MyLeftField("8", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false); 
            pan.add(field, c);
            c.gridx++;          
            field = new MyLeftField("9", "", 2, 14, Color.DARK_GRAY, Font.PLAIN, Color.WHITE, false); 
            pan.add(field, c);
            JOptionPane.showOptionDialog(null, pan
                    , "test", JOptionPane.DEFAULT_OPTION, JOptionPane.DEFAULT_OPTION, null, null, null);

1 Ответ

0 голосов
/ 29 января 2020

Для недели номер 5: gridy = 1, gridx = 4 и gridwidth = 2.

В вашем примере вторая строка содержит только 7 компонентов. Каждый компонент занимает один столбец.

По умолчанию размер столбца по умолчанию равен 0, если ни один компонент не был добавлен в столбец, поэтому нельзя просто сказать, что компонент занимает две ячейки, поскольку GridBagLayout не знает, каким должно быть значение второго столбца.

Если вы хотите, чтобы на пятой неделе использовались два столбца, вам действительно нужно создать сетку из 8 столбцов.

Это это можно сделать, добавив код, подобный следующему:

GridBagLayout gbl = new GridBagLayout();
yourPanel.setLayout( gbl );

//  Set up a grid with 8 columns.
//  The minimum width of a column is 50 pixels

int[] columns = new int[8];
Arrays.fill(columns, 50);
gbl.columnWidths = columns;

Теперь GridBagLayout понимает, какой должна быть ширина столбца для любого столбца, который не имеет реального компонента.

Итак, Кнопка недели 5 должна находиться под Janvier и Fevrier.

См .: Создание макета настольной игры с использованием JLayeredPane для полного рабочего примера с использованием этого базового c подхода.

...