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