[英]How would I dynamically remove swing component from JPanel
我有一个包含JPanel的JFrame.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教程初始线程中阅读
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.