您需要验证()后删除。下面是删除所有和添加新的组件的工作演示:
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.event.MouseInputAdapter;
public class Test extends JFrame {
private int click_count = 0;
public Test(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout());
addLabel();
validate();
pack();
}
/**
*
*/
private void labelClicked() {
getContentPane().removeAll();
addLabel();
revalidate();
repaint();
click_count++;
}
/**
*
*/
private void addLabel() {
JLabel label = new JLabel("click count " + click_count);
label.setPreferredSize(new Dimension(200,100));
label.addMouseListener(new MouseInputAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
labelClicked();
}
});
add(label);
}
public static void main(String[]arghs){
Test frame = new Test();
frame.setVisible(true);
}
}
另外,您可以通过更新其更改组件的属性,而不删除它,并加入一个新问题:
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.event.MouseInputAdapter;
public class Test extends JFrame {
private JLabel label;
private int click_count = 0;
public Test(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
label = new JLabel("click count " + click_count);
label.setPreferredSize(new Dimension(200,100));
label.addMouseListener(new MouseInputAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
labelClicked();
}
});
add(label);
validate();
pack();
}
/**
*
*/
private void labelClicked() {
click_count++;
updateLabel();
repaint();
}
/**
*
*/
private void updateLabel() {
label.setText("click count " + click_count);
}
public static void main(String[]arghs){
Test frame = new Test();
frame.setVisible(true);
}
}
道歉。我也尝试了上述命令,但它没有奏效。我更新了我的问题。 – Naseem
您是直接将组件添加到框架还是将它们添加到添加到框架的面板?我的猜测是,您将重复组件添加到面板而不是框架本身。 – Titus
我正在向面板添加组件,然后在JFrame中添加这些面板。 – Naseem