2016-12-18 3 views
0

С Java GridBagLayout, почему перед столбцом находится большое пространство справа от первого JTextField (помечено как A), а последние два JTextField B и C ведут себя так, как ожидалось, без нежелательных промежутков между ними и как я могу устранить пробел? Я добавил изображение ниже, чтобы показать проблему вместе с кодом.Как я могу избавиться от нежелательного пространства между Java JTextField и JLabel с помощью GridBagLayout

/* Label digital timer */ 
    gbcRightPanel.gridx = 0; 
    gbcRightPanel.gridy = 0; 
    rightPanel.add(labelDitigalTimer, gbcRightPanel); 

    /* Text Field Hours */ 
    gbcRightPanel.gridx = 0; 
    gbcRightPanel.gridy = 1; 
    gbcRightPanel.weighty = 1; 
    rightPanel.add(jtxtFieldHours, gbcRightPanel); 

    /* Label colon */ 
    gbcRightPanel.gridx = 1; 
    gbcRightPanel.gridy = 1; 
    rightPanel.add(new JLabel(":"), gbcRightPanel); 

    /* Text Field Minuites */ 
    gbcRightPanel.gridx = 2; 
    gbcRightPanel.gridy = 1; 
    rightPanel.add(jtxtFieldMinuites, gbcRightPanel); 

    /*Colon*/ 
    gbcRightPanel.gridx = 3; 
    gbcRightPanel.gridy = 1; 
    rightPanel.add(new JLabel(":"), gbcRightPanel); 

    /* Text Field Seconds */ 
    gbcRightPanel.gridx = 4; 
    gbcRightPanel.gridy = 1; 
    rightPanel.add(jtxtFieldSeconds, gbcRightPanel);  

Image of the right panel with space problem

+0

Опубликуйте действительный [SSCCE] (http://SSCCE.org), если ответ не решит вашу проблему. –

ответ

1

A GridBagLayout работает с ячейками, состоящими из строк/столбцов.

В первой строке есть одна колонка. Вторая строка содержит 5 столбцов.

Таким образом, ширина столбца 1 является шириной самого большого компонента во всех строках первого столбца, который является вашей меткой, поэтому вы видите дополнительное пространство.

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

gbcRightPane.gridWidth = 5; 
rightPanel.add(labelDitigalTimer, gbcRightPanel); 
gbcRightPane.gridWidth = 1; // reset for the other components. 

Теперь этикетка будет отображаться выше всех 5 компонентов. Затем вы можете определить, хотите ли вы, чтобы метка была центрирована или левая, с указанием соответствующего ограничения.

Для получения дополнительной информации о ограничениях и рабочих примерах читайте раздел из учебника Swing по телефону How to Use GridBagLayout.

Другим подходом является использование вложенных панелей. Таким образом, вы можете создать отдельную панель для текстовых полей и двоеточие. Затем в GridBagPanel вы добавляете метку и панель как два отдельных компонента.

Ознакомьтесь с другими менеджерами компоновки из учебника, чтобы получить представление о том, как каждый менеджер макетов работает с вами, и может эффективно вставлять панели для получения желаемого макета.

+0

Ваше решение установить ширину сетки метки на 5 и сбросить ширину сетки для других компонентов. Как первая строка имеет один столбец, а вторая имеет 5? Или вы имеете в виду, что gridWidth, установленный для первой строки, будет определять ширину любых последующих строк, которые были созданы? Или ты имел в виду мой конкретный случай? – FlashspeedIfe

+1

@FlashspeedIfe. В предлагаемом решении первая строка имеет один компонент, который охватывает ширину первых 5 столбцов второй строки. Поскольку во второй строке всего 5 компонентов, компонент в первой строке охватывает все компоненты во второй строке. Прочтите учебник и играйте с примером кода. – camickr

0
gbcRightPanel.weighty = 1; 

Делает панель имеют мультипликатор/Weigth 1,0, поэтому любое место на оси х, которая остается после все остальные элементы были помещены, перейти к первому столбцу ,

Попробуйте добавить четвертую колонку и придайте этой колонке больший вес.