2016-03-20 3 views
0

У меня есть следующий компонент поворота. См. Изображение. Здесь ярлык, выпадающая скобка и метка и текстовое поле неправильно выровнены. Любая идея, что вызывает эту проблему?Как оставить выровнять компоненты качаний в JPanel

The category Label and combo box are not aligned properly

Я использую GridBagLayout в панели. Затем добавьте на панель компоненты, такие как label и combobox, и текстовое поле.

Ниже приведен код, который я использовал.

srchCategoryLbl = new JLabel("Category"); 
    categoryCmb = new JComboBox<>(); 
    categoryCmb.setPreferredSize(dimensionTxt); 
    categoryCmb.setBounds(0, 0, 0, 0); 

    srchProductCodeLbl = new JLabel("Product Code"); 
    productCodeTxt = new JTextField(); 
    productCodeTxt.setPreferredSize(dimensionTxt); 

    srchProductDescLbl = new JLabel("Product Desc"); 
    productDescTxt = new JTextField(); 
    productDescTxt.setPreferredSize(dimensionTxt); 

    searchBtn = new JButton("Search"); 

    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.gridx = 0; 
    gbc.gridy = 0; 
    gbc.anchor = GridBagConstraints.WEST; 
    searchPanel.add(srchCategoryLbl, gbc); 

    gbc.gridx = 0; 
    gbc.gridy = 1; 
    searchPanel.add(categoryCmb, gbc); 

    gbc.gridx = 1; 
    gbc.gridy = 0; 
    searchPanel.add(srchProductCodeLbl, gbc); 

    gbc.gridx = 1; 
    gbc.gridy = 1; 
    searchPanel.add(productCodeTxt, gbc); 

    gbc.gridx = 2; 
    gbc.gridy = 0; 
    searchPanel.add(srchProductDescLbl, gbc); 

    gbc.gridx = 2; 
    gbc.gridy = 1; 
    searchPanel.add(productDescTxt, gbc); 

    gbc.gridx = 3; 
    gbc.gridy = 1; 
    searchPanel.add(searchBtn, gbc); 
+1

Я думаю, что он не исправит вашу проблему, но обычно не рекомендуется использовать setBounds и setPreferrededSize. Пусть LayOut Manager обрабатывает положение и размер компонентов –

+0

@FranciscoPuga. В этом случае, как установить размер компонента? – Mayuran

+0

Вы используете Mac? Он помещает специальную «фокусную» границу вокруг текстовых полей, которая может отображать их. Вы можете использовать вставки для перемещения меток вправо на несколько пикселей для компенсации – MadProgrammer

ответ

2

При выборе одного из полей, вы можете увидеть, что MacOS помещает «фокус» прямоугольник вокруг поля, это достигается за счет использования пользовательских Border какой-то.

Fields

Вы можете установить границы для null (или что-то еще), но это может повлиять на другой взгляд и ощущение неожиданным образом и изменит пользовательский интерфейс таким образом, что они не могут оценить

Лучшим решением является использование GridBagConstraints#insets свойств площадки метки немного ...

Some Padding

JLabel srchCategoryLbl = new JLabel("Category"); 
JComboBox<Object> categoryCmb = new JComboBox<>(); 
categoryCmb.setPrototypeDisplayValue("This is a really long test string"); 

JLabel srchProductCodeLbl = new JLabel("Product Code"); 
JTextField productCodeTxt = new JTextField(20); 

JLabel srchProductDescLbl = new JLabel("Product Desc"); 
JTextField productDescTxt = new JTextField(20); 

JButton searchBtn = new JButton("Search"); 

setLayout(new GridBagLayout()); 
GridBagConstraints gbc = new GridBagConstraints(); 
Insets labelInsets = new Insets(0, 4, 0, 4); 
Insets fieldInsets = new Insets(0, 0, 0, 0); 
gbc.gridx = 0; 
gbc.gridy = 0; 
gbc.anchor = GridBagConstraints.WEST; 
gbc.insets = labelInsets; 
add(srchCategoryLbl, gbc); 

gbc.gridx = 0; 
gbc.gridy = 1; 
gbc.insets = fieldInsets; 
add(categoryCmb, gbc); 

gbc.gridx = 1; 
gbc.gridy = 0; 
gbc.insets = labelInsets; 
add(srchProductCodeLbl, gbc); 

gbc.gridx = 1; 
gbc.gridy = 1; 
gbc.insets = fieldInsets; 
add(productCodeTxt, gbc); 

gbc.gridx = 2; 
gbc.gridy = 0; 
gbc.insets = labelInsets; 
add(srchProductDescLbl, gbc); 

gbc.gridx = 2; 
gbc.gridy = 1; 
gbc.insets = fieldInsets; 
add(productDescTxt, gbc); 

gbc.gridx = 3; 
gbc.gridy = 1; 
add(searchBtn, gbc); 

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

Я также настоятельно рекомендую вам избегать использования setPreferredSize как есть много, что идет в расчете соответствующего размера для компонентов, а вместо этого, чтобы использовать функциональные возможности, которые уже доступны (например, setColumns на JTextField s), см выше код для некоторых примеров

Смежные вопросы