У меня есть JFrame, содержащий JPanel. JPanel содержит JComboBox, JTextField, кнопку добавления и кнопку удаления. Если я нажму кнопку добавления, мне нужно добавить строку, связанную с вышеуказанными компонентами (то есть, JComboBox, JTextField, добавить кнопку и кнопку удаления) и отключить предыдущую кнопку добавления. Если я нажму кнопку добавления в новообразованной строке, то это тоже произойдет. Я сделал эти. Теперь, если я нажму кнопку удаления, мне нужно удалить свинг компоненты из этой строки в JPanel и аналогично для других кнопок удаления. Как это сделать? Пожалуйста, помогите мне. Ниже мой код
public class SaveIt extends JFrame {
JPanel panel;
JButton btnAdd;
JButton btnRemove;
JTextField txtAmount;
JComboBox cmbAmount;
private int f = 0;
private int h = 0;
public SaveIt() {
super("Add component on JFrame at runtime");
setLayout(new BorderLayout());
panAmount = new JPanel();
panAmount.setLayout(new FlowLayout());
add(panAmount, BorderLayout.CENTER);
cmbAmount = new JComboBox();
add(cmbAmount, BorderLayout);
txtAmount = new JTextField();
add(txtAmount, BorderLayout);
btnAdd = new JButton("Add");
add(btnAdd, BorderLayout.SOUTH);
btnAdd.addActionListener(this);
btnRemove = new JButton("Remove");
add(btnRemove, BorderLayout.SOUTH);
btnRemove.addActionListener(this);
cps = new ArrayList<JComponent>();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 500);
setVisible(true);
}
public void actionPerformed(ActionEvent evt) {
getPanComponents();
}
public void getPanComponents() {
btnAdd.setEnabled(false);
btnRemove.setVisible(true);
cmbAmount = new JComboBox();
cmbAmount.setBounds(80, 50 + f, 115, 28);
txtAmount = new JTextField();
txtAmount.setBounds(310, 50 + f, 135, 28);
btnAdd = new JButton("Add");
btnAdd.setBounds(463, 50 + f, 41, 29);
btnRemove = new JButton("Remove");
btnRemove.setBounds(510, 50 + f, 41, 29);
btnAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
getPanComponents();
}
});
btnRemove.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
}
});
cps.add(cmbAmount);
cps.add(txtAmount);
cps.add(btnAdd);
cps.add(btnRemove);
for (JComponent widget : cps) {
panAmount.add(widget);
}
panAmount.revalidate();
h = h + 40;
panAmount.repaint();
panAmount.setPreferredSize(new Dimension(611, 89 + h));
f = f + 35;
}
public static void main(String[] args) {
SaveIt acojfar = new SaveIt();
}
}
нет причин использовать NullLayout, используйте GridLayout с одним столбцом
использовать JPanel в качестве контейнера для JComponents
Добавить JPanel содержит другие JPanels для JScrollPane
не устанавливать для PreferredSize, а также для revalidate() и repaint()
SaveIt acojfar = new SaveIt();
должен быть завернут в invokeLater, больше для чтения в учебнике Oracle Initial Thread