Добавить компоненты в GridBagLayout на основе выбранного элемента в JComboBox - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть 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);
}
}
...