gpt4 book ai didi

java - 我将如何从 JPanel 中动态删除 swing 组件

转载 作者:行者123 更新时间:2023-11-29 05:24:10 27 4
gpt4 key购买 nike

我有一个包含 JPanel 的 JFrame。JPanel 包含一个 JComboBox、JTextField、添加按钮和一个删除按钮。如果我单击添加按钮,我需要添加一行包含上述组件(即 JComboBox、JTextField ,添加按钮和删除按钮)并禁用之前的添加按钮。如果我单击新形成的行中的添加按钮,同样需要发生。我已经完成了这些。现在,如果我单击任何删除按钮,我需要从 JPanel 的那一行中删除 Swing 组件,对于其他删除按钮也是如此。该怎么做?请帮助我。下面是我的代码

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();
}
}

最佳答案

  1. 没有理由使用 NullLayout , 使用 GridLayout一栏

  2. 使用 JPanel作为 JComponents 的容器

  3. 将包含另一个 JPanel 的 JPanel 添加到 JScrollPane

  4. 不要为 PreferredSize 设置,也不要为 revalidate() 和 repaint() 调用

  5. SaveIt acojfar = new SaveIt(); 应该被包装到 invokeLater 中,更多信息请阅读 Oracle tutorial Initial Thread

  6. for example

关于java - 我将如何从 JPanel 中动态删除 swing 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23361628/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com