为什么在更改组件时必须在我的JFrame上使用setvisible()?

时间:2014-03-24 12:37:11

标签: java swing jframe

所以为了简单起见,我设置了一个小测试代码来解决这个问题。基本上我有JFrame并且我添加了'this'(我只是从JComponent扩展我的主类以节省时间)。此组件填充红色背景。然后我让它睡了2秒然后键入它。

f.remove(this);
thing t = new thing();
f.add(t);
f.setVisible(true);

f是我的JFrame对象,'thing'只是另一个扩展JComponent的类,它描绘了蓝色背景。

当我评论setvisible()时,它不再变为蓝色..我尝试过使用t.setVisible(true)但似乎我必须再次使框架可见,而不是组件

有没有人知道我为什么要打电话...或者是否有另一种方法可以在一个框架内更改组件?

2 个答案:

答案 0 :(得分:2)

  

“基本上我有一个JFrame,我向它添加'this'(我只是从JComponent扩展我的主类以节省时间)。这个组件填充红色背景。然后我让它睡2秒然后键入此“。

  1. 不要“睡觉”你的程序。而是使用java.swing.Timer在GUI或动画上执行重复任务。点击How to Use Swing Timers了解更多信息。您可以看到一堆Timer示例herehere以及herehere以及here

  2. 使用CardLayout可以在视图之间切换,而不是尝试添加和删除面板。它可以帮助您避免添加和删除components/containers时出现的许多问题。点击How to Use CardLayout了解更多信息。另请参阅一个简单示例here

  3. 要回答您的主要问题,每当您从框架中删除和添加组件时,都需要revalidate()它。 setVisible()为您照顾。


  4. 旁注

    • 似乎很多添加删除背景面板)只是为了改变背景。为什么不只是setBackround()?您可以使用Timer
    • 切换颜色

答案 1 :(得分:0)

调用setVisible(true)会使帧出现在屏幕上。有时您可能会看到使用show方法。这两个用法是等价的,但我们使用setVisible(true)来保持一致性。