Jframe组件添加或删除后怎样更新窗口?

我试过用使用Jframe.validate()可以在新增之后正确显示,但删除之后调用Jframe.validate()却不能正确显示。
Jframe.add(JComponent);
Jframe.validate();

Jframe.validate()更新组件之后为什么又不在窗口上同步显示呢?

书本上的做法是
Jframe.add(JComponent);
Jframe.setVisible(false);
Jframe.setVisible(true);

我的问题是除了上面的做法之外,还有什么比较靠谱的做法呢?
麻烦各位指点一下,谢谢哈。

[code="java"]import java.util.Scanner;

import javax.swing.JButton;

import javax.swing.JFrame;
import java.awt.*;
public class Test{

public static void main(String[] args) {

Scanner Scr = new Scanner(System.in);

JButton Jbt = new JButton("OK");

JFrame Jfr = new JFrame();

Jfr.setSize(200, 200);

Jfr.setLocationRelativeTo(null);

Jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Jfr.setVisible(true);

Scr.nextLine();

Jfr.setSize(250, 250);

Jfr.repaint();

Scr.nextLine();
Jfr.add(Jbt, BorderLayout.CENTER);
Jfr.setSize(100, 100);

Jfr.repaint();

}

} [/code]

[size=x-large]也是没有问题的啊[/size]

[code="java"]jframe.invalidate();
[/code]

[code="java"]
frame.repaint();
frame.validate();

    frame.invalidate();
    frame.validate();

[/code]

jframe重新pack一下呢

是要这效果么?

[code="java"]import java.util.Scanner;

import javax.swing.JButton;

import javax.swing.JFrame;

public class Test{

public static void main(String[] args) {

Scanner Scr = new Scanner(System.in);

JButton Jbt = new JButton("OK");

JFrame Jfr = new JFrame();

Jfr.setSize(200, 200);

Jfr.setLocationRelativeTo(null);

Jfr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Jfr.setVisible(true);

Scr.nextLine();

Jfr.setSize(250, 250);
Jfr.repaint();
Scr.nextLine();

Jfr.setSize(100, 100);

Jfr.repaint();
}

} [/code]