java gui使用JButton删除标签

时间:2010-10-30 04:57:31

标签: java

我需要帮助的是删除标签并通过单击按钮创建新标签。目前,这将添加一个新标签,但不会删除旧标签。我找不到一个可以工作的命令,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 个答案:

答案 0 :(得分: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");

  // ...
 }

答案 1 :(得分:1)

您为什么要尝试删除并添加标签。您所需要做的就是:

label1.setText("some different text");

但是,删除/添加组件到可见GUI的一般规则是:

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

答案 2 :(得分: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);
  }

答案 3 :(得分:0)

从框架中删除标签。您还必须更新包含标签的框架。这个对我很有用。

frame.getContentPane().remove(label);

为了澄清,只需这样做。

只需输入frame的名称,然后.getContentPane().remove,然后(label)