У меня есть GridBagLayout
и некоторые компоненты , как показано на рисунке
Теперь я хочу добавить компоненты на gridx=3; gridy=1
в столбце «Значение». Эти компоненты различаются в зависимости от элемента, выбранного в JComboBox
(например, если выбран элемент «Пол», будет отображаться поле со списком M, F), а при выборе элемента «Возраст» будет отображаться JTextField
.
Теперь проблема в том, что эти компоненты отображаются не в одной строке, а в другой позиции , как показано на этом рисунке , даже если я установил gridx=3; gridy=1
.
Как я могу это исправить?
Код показан ниже:
public class FilterPanel extends JPanel {
private JLabel field = new JLabel("Field");
private JLabel operator = new JLabel("Operator");
private JLabel value = new JLabel("Value");
private String[] attrs = { "----------------", "Sex", "Age"};
private JComboBox<String> attrList = new JComboBox<String>(attrs);
private JComboBox<String> opListString = new JComboBox<String>();
private JTextField txt = new JTextField(9);
private GridBagConstraints gbc;
public FilterPanel() {
Dimension size = getPreferredSize();
size.width = 500;
size.height = 300;
setPreferredSize(size);
setLayout(new GridBagLayout());
gbc = new GridBagConstraints();
setBorder(BorderFactory.createTitledBorder("Filter Condition"));
// First row
gbc.weightx = 0.5;
gbc.gridx = 1;
gbc.gridy = 0;
this.add(this.field, gbc);
gbc.gridx++;
this.add(this.operator, gbc);
gbc.gridx++;
this.add(this.value, gbc);
// Second row
gbc.gridx = 0;
gbc.gridy = 1;
this.add(new JLabel("1"), gbc);
gbc.gridx = 1;
// SET DIMENSION
attrList.setPrototypeDisplayValue("XXXXXXXXXXXXXX");
this.add(attrList, gbc);
gbc.gridx = 2;
//SET DIMENSION
opListString.setPrototypeDisplayValue("XXXXXXX");
this.add(opListString, gbc);
//gbc.gridx = 3;
//this.add(txt, gbc);
attrList.addActionListener((ActionEvent) -> {
String choose = attrList.getSelectedItem().toString();
switch(choose) {
case "----------------": {
removeItem();
break;
}
case "Age": {
removeItem();
addOpsString();
addValueComp();
break;
}
}
});
gbc.gridx = 4;
this.add(new JButton("Rem"), gbc);
// Third row
gbc.weighty = 10;
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
gbc.gridx = 1;
gbc.gridy = 2;
this.add(new JLabel("Add"), gbc);
}
public void addOpsString() {
opListString.addItem("is equals");
}
public void removeItem() {
opListString.removeAllItems();
}
public void addValueComp() {
gbc.gridx = 3;
gbc.gridy = 1;
this.add(txt,gbc);
}
}