使用JButton删除Java GUI中的标签

3
我需要帮助的是,通过按钮点击删除标签并创建一个新的标签。目前这个功能可以添加新的标签,但无法删除旧的标签。我找不到可行的命令,northpanel.remove()会同时销毁面板和之前的标签,但是这样就无法创建新的标签了。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

@SuppressWarnings("serial")
public class test2 extends JFrame implements ActionListener {

 private JTextField textfield;

 private JPanel northPanel = new JPanel();
 private JPanel southPanel = new JPanel();

 public test2() {
  setSize(400, 200);

  BorderLayout layout = new BorderLayout ();
  setLayout(layout);

  JLabel label1 = new JLabel("remove this");
  northPanel.add(label1);

  JLabel label2 = new JLabel("Enter move");
  southPanel.add(label2);
  textfield = new JTextField(10);
  southPanel.add(textfield);
  JButton button = new JButton("Move / remove label");
  button.addActionListener(this);
  southPanel.add(button);

  add(northPanel, BorderLayout.NORTH);
  add(southPanel, BorderLayout.SOUTH);
 }

 @Override
 public void actionPerformed(ActionEvent e) {
  String text = textfield.getText();

  if (text.equals("")) {
   System.out.println("textfield is empty");
  } else {
   System.out.println(text);
  }


 // northPanel.remove();

  JLabel label3 = new JLabel("new label");
  northPanel.add(label3);

  repaint();
  validate();
 }

 public static void main(String[] args) {
  test2 app = new test2();
  app.setVisible(true);
  app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
}
4个回答

2
为什么不更改标签的文本,而是删除旧标签并添加新标签呢?
private JPanel northPanel = new JPanel();
private JPanel southPanel = new JPanel();
private JLabel label1 = new JLabel("remove this");

// ....


@Override
 public void actionPerformed(ActionEvent e) {
  // ...

  label1.setText("new text");

  // ...
 }

我之前尝试过,但没有成功,但现在它成功了,我猜以前我没有更新GUI...我真傻。 - ric
@ric,那么你打算接受答案,让大家知道问题已经解决了吗? - camickr

1

你为什么要尝试删除和添加标签。你只需要做以下操作:

label1.setText("some different text");

然而,对于从可见GUI中删除/添加组件的一般规则是执行以下操作:

panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();

0

label1声明为实例变量。然后在构造函数中初始化label1。 现在将actionPerformed更改如下:

 public void actionPerformed(ActionEvent e) {
  String text = textfield.getText();

  if (text.equals("")) {
   System.out.println("textfield is empty");
  } else {
   System.out.println(text);
   label1.setText(text);
  }

0

要从框架中删除标签,您还必须更新包含该标签的框架。这个方法对我非常有效。

frame.getContentPane().remove(label);

为了澄清,请按照以下步骤操作。

只需输入您的frame名称,然后键入.getContentPane().remove再键入(label)即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接