所以为了简单起见,我设置了一个小测试代码来解决这个问题。基本上我有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)但似乎我必须再次使框架可见,而不是组件
有没有人知道我为什么要打电话...或者是否有另一种方法可以在一个框架内更改组件?
答案 0 :(得分:2)
“基本上我有一个JFrame,我向它添加'this'(我只是从JComponent扩展我的主类以节省时间)。这个组件填充红色背景。然后我让它睡2秒然后键入此“。
不要“睡觉”你的程序。而是使用java.swing.Timer
在GUI或动画上执行重复任务。点击How to Use Swing Timers了解更多信息。您可以看到一堆Timer
示例here和here以及here和here以及here
使用CardLayout
可以在视图之间切换,而不是尝试添加和删除面板。它可以帮助您避免添加和删除components/containers
时出现的许多问题。点击How to Use CardLayout了解更多信息。另请参阅一个简单示例here。
要回答您的主要问题,每当您从框架中删除和添加组件时,都需要revalidate()
它。 setVisible()
为您照顾。
旁注
setBackround()
?您可以使用Timer
答案 1 :(得分:0)
调用setVisible(true)会使帧出现在屏幕上。有时您可能会看到使用show方法。这两个用法是等价的,但我们使用setVisible(true)来保持一致性。