如何在Java中刷新GUI界面?

6
我有一个与Java相关的一般性问题。
我正在编写一个带有GUI菜单的应用程序。我试图根据单选按钮的选择更改GUI菜单的某个部分。
我需要做什么:
  1. Redraw the whole window or just update that part with:

    setVisible(true)?
    
  2. If I just use the statement from #1 above .. the GUI is fine -- until I move the mouse over it and then I see the previous button choice. What am I doing wrong?


我认为有一个paint()方法。 - amphibient
repaint() 可能是你想要的。 - daniel gratzer
我尝试了仅使用repaint()方法,但完全没有效果。我还尝试了与此同时使用setVisible(true),但也没有效果。 - ironmantis7x
2
请解释一下“更改GUI菜单的一部分”实际上意味着什么?告诉我们为什么你想这样做,现在你正在问如何做到这一点,而这是在回答为什么之后的事情!在Swing中,您永远不需要手动执行您所要求的操作,只需更新模型即可自动更新屏幕。 - user177800
mkhelif:我通过点击刷新按钮来更新菜单,该按钮会重新将分组添加到JFrame面板上(如果这样说有意义的话??)。 - ironmantis7x
显示剩余2条评论
3个回答

8
Swing组件有repaint()、revalidate()和doLayout()方法。其中一个应该能够重新绘制你想要的任何部分。但是,doLayout不是你应该负责的事情,这是布局引擎的责任。
您还可以查看this post,第一条回复有一个相当好的解释,并链接到了一篇更详细的文章。
就您问题的第二部分而言,我不确定,但我们可能需要看一些代码才能了解情况。'替换区域'是否实际上已从视图中删除?

1
我需要导入什么才能使用repaint()或doLayout()? - ironmantis7x
我以为我已经在我的答案中添加了 revalidate... 我错了。不过,所链接的问题涉及到这个。现在正在更新我的答案。 - shortstuffsushi
shortstuffsushi:看着我的代码——不,我还没有从GUI中移除替换区域。现在这一切开始有点讲得通了....我是否使用remove(component)来摆脱我想要替换的内容?? - ironmantis7x
好的 - 原来如果我删除旧的东西,那么新的东西就非常好用!!感谢大家的帮助!!! - ironmantis7x
1
没问题。但是,如果这是一种可能会来回切换的东西,您可能还需要考虑Andrew Thompson的答案 - 使用CardLayout将保留两个“屏幕”的内存,并消除翻转它们的大量手动工作。 - shortstuffsushi
显示剩余2条评论

4
在我的应用程序中,用户可以选择他们想要测试的设备平台类型(该选项是左侧两个单选按钮的一组)。当用户选择Android或iOS时,中心的复选框分组会更改为反映他们可以测试的一组Android设备或一组iOS设备。
以下是翻译后的内容:

在我的应用程序中,用户可以选择他们想要测试的设备平台类型(该选项是左侧两个单选按钮的一组)。当用户选择Android或iOS时,中间的分组面板会改变,以反映他们可以测试的一组Android设备或一组iOS设备。

  1. 在“中心分组”中添加一个面板。
  2. 使用CardLayout来布局面板。
  3. 将iOS和Android控件添加到具有卡片布局的面板中。
  4. 按需切换它们之间的显示。

3

在顶层组件上调用revalidate()


我对Java还不熟悉,请耐心等待......我应该如何在顶层组件上调用revalidate()?每次我尝试在repaint()之后插入它时,都会得到编译器错误。 - ironmantis7x

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接