如何用Java刷新GUI?

如何用Java刷新GUI?,java,swing,user-interface,Java,Swing,User Interface,我有一个与Java相关的一般性问题 我正在编写一个具有GUI菜单的应用程序。我试图根据单选按钮的选择更改GUI菜单的一部分 我是否需要: 重新绘制整个窗口或仅使用以下内容更新该部分: setVisible(true)? 如果我只使用上面第1条中的语句。。GUI很好——直到我将鼠标移到它上面,然后我看到前面的按钮选择。我做错了什么 Swing组件有一个repaint()、revalidate()和doLayout()方法。其中一个应该能够重新绘制任何你想要的部分。然而,doLayout不是你应

我有一个与Java相关的一般性问题

我正在编写一个具有GUI菜单的应用程序。我试图根据单选按钮的选择更改GUI菜单的一部分

我是否需要:

  • 重新绘制整个窗口或仅使用以下内容更新该部分:

    setVisible(true)?
    
  • 如果我只使用上面第1条中的语句。。GUI很好——直到我将鼠标移到它上面,然后我看到前面的按钮选择。我做错了什么


  • Swing组件有一个repaint()、revalidate()和doLayout()方法。其中一个应该能够重新绘制任何你想要的部分。然而,doLayout不是你应该负责的事情,那是布局引擎的责任

    你可能还想看看,第一个回复有一个很好的解释,并链接到一篇更详细的文章

    关于你问题的第二部分,我不确定,但我们可能需要看一些代码来了解情况。“替换区域”是否实际从视图中删除?

    调用顶层组件上的
    revalidate()

    ..在我的应用程序中,用户选择要进行top测试的设备平台类型(该选项是左侧两个单选按钮的集合)。当用户选择Android或iOS时,复选框的中心分组将更改,以反映他们可以测试的一组Android设备或他们可以测试的一组iOS设备

  • 将面板置于“中间分组”中
  • 卡片布局
    用于面板
  • 将iOS和Android控件添加到具有卡布局的面板中
  • 根据需要在它们之间切换

  • 我认为有一种paint()方法repaint()可能是您尝试的方法,但它根本不起作用。我尝试了setVisible(true),但这也不起作用?告诉我们你为什么要这样做,现在你在问怎么做,为什么之后是什么!在Swing中,您不必手动执行所要求的操作,只需更新模型,屏幕就会自动更新。您不必手动重新绘制任何组件。如何更新菜单?我需要导入什么才能使用repaint()或doLayout()?您不需要导入任何额外的内容,这些应该是您正在使用的Swing组件上的方法--请参阅文档。组件的任何子类都应该有这些方法可用。您避免直接调用doLayout,如果您发现自己处于这样一个位置:这是唯一有效的方法,那么您就错了一件事。doLayout应该对您当前的容器产生更大的影响。相反,使用invalidate Instead我认为我已经在我的答案中添加了revalidate。。。我的错误。不过,这个问题与关于它的讨论有关。现在更新我的答案。没问题。但是,如果这是一个可能来回切换的东西,你可能也想考虑Andrew Thompson的答案——使用CARDFayStay将保持两个“屏幕”在内存中,并且删除很多手工工作来翻转它们。我是java新手,所以请对我耐心一点…到底如何在顶级组件上调用revalidate()?每次我尝试在repaint()之后插入它时,它都会得到一个编译器错误。