Я пытаюсь добавить новую строку компонентов после нажатия кнопки, расположенной в предыдущей строке.
Эта цифра:
![https://i.stack.imgur.com/TkbZf.png](https://i.stack.imgur.com/TkbZf.png)
показывает строку, которую я хочу скопировать в следующую строку после нажатия кнопки «Добавить».
То, что я пытался сделать, дает мне такой результат:
![https://i.stack.imgur.com/1zgWR.png](https://i.stack.imgur.com/1zgWR.png)
но только после того, как я впервые нажал кнопку «Добавить», после чего выбор элемента был сделан.
Как сделать кнопку «Добавить» независимой от других компонентов и как настроить визуализацию?
Вот код:
////// First row
// First Column
gbc.weightx = 0.5;
gbc.gridx = 1;
gbc.gridy = 0;
this.add(this.field, gbc);
// Second Column
gbc.gridx++;
this.add(this.operator, gbc);
// Third Column
gbc.gridx++;
this.add(this.value, gbc);
////// Second row
gbc.gridx = 0;
gbc.gridy = 1;
this.add(rowNumber, gbc);
// First Column
gbc.gridx = 1;
//////////////////////////////////////////////////// SET DIMENSION
attrList.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXX");
this.add(attrList, gbc);
// Second Column
gbc.gridx = 2;
//////////////////////////////////////////////////// SET DIMENSION
opListString.setPrototypeDisplayValue("XXXXXXX");
this.add(opListString, gbc);
// Third Column (Hidden)
gbc.gridx = 3;
////////////////////////////////////////////////////SET DIMENSION
sessoBox.setPrototypeDisplayValue("XXXXXXXXXXXXXX");
this.add(sessoBox, gbc);
sessoBox.setVisible(false);
////////////////////////////////////////////////////SET DIMENSION
titoloBox.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXXXXXXX");
this.add(titoloBox, gbc);
titoloBox.setVisible(false);
// Fourth Column
gbc.gridx = 4;
remButton = new JButton("Rem");
this.add(remButton, gbc);
// Add row JButton
gbc.gridx = 5;
gbc.gridy = 1;
this.add(addRow, gbc);
// Add empty JLabel to positioning components at the top
gbc.weighty = 10;
gbc.gridx = 1;
gbc.gridy = 2;
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
this.add(emptyLabel, gbc);
// Add Action Listener on Attributes to choose
// Display Value Components based on item selected
attrList.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String choose = attrList.getSelectedItem().toString();
switch(choose) {
case "----------------": {
removeItem();
break;
}
case "Sex": {
removeItem();
addOpsString();
addValueComp2(sessoBox);
}
}
}
});
// Remove row
/*remButton.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
remButton.remove((addRow));
}
});
*/
// Add row
addRow.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
gbc.gridy = ++rowNum;
gbc.gridx = 0;
panel.remove(emptyLabel);
panel.add(new JLabel(Integer.toString(rowNum)), gbc);
gbc.gridx++;
panel.add(attrList);
gbc.gridx++;
panel.add(opListString);
gbc.gridx++;
gbc.gridx++;
panel.add(remButton);
gbc.gridx++;
panel.add(addRow);
// Add empty JLabel to positioning components at the top
gbc.weighty = 10;
gbc.gridx = 1;
gbc.gridy = rowNum + 1;
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
panel.add(emptyLabel, gbc);
}
});