【问题标题】:How do I refresh a GUI in Java?如何在 Java 中刷新 GUI?
【发布时间】:2023-04-02 16:27:01
【问题描述】:

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

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

我需要:

  1. 重绘整个窗口或仅更新该部分:

    setVisible(true)?
    
  2. 1234563我做错了什么?

【问题讨论】:

  • 我认为有一个paint()方法
  • repaint() 可能是你想要的
  • 我只尝试了 repaint() 方法,但它根本不起作用。我尝试了 setVisible(true) ,但也没有用。
  • 解释一下“改变GUI菜单的一部分”实际上意味着什么?告诉我们WHY你想这样做,现在你问如何,它在why之后!在 Swing 中,您永远不必手动执行您要求的操作,您只需更新模型,屏幕就会自动更新。
  • 您不必手动重新绘制任何组件。你是如何更新菜单的?

标签: java swing user-interface


【解决方案1】:

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

您可能还想查看this post,第一个回复有很好的解释,并链接到更详细的文章。

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

【讨论】:

  • 我需要导入什么才能使用 repaint() 或 doLayout()?
  • 你不需要导入任何额外的东西,这些应该是你正在使用的 Swing 组件上的方法——参见文档docs.oracle.com/javase/6/docs/api/java/awt/Component.html。 Component 的任何子类都应该有这些方法可用。
  • 您避免直接调用 doLayout,如果您发现自己处于唯一有效的位置,那么您做错了一件事。 doLayout 应该对您当前的容器产生更多影响。相反,请改用 invalidate
  • 我以为我在答案中添加了重新验证...我的错误。不过,链接的问题是关于它的讨论。现在更新我的答案。
  • 没问题。但是,如果这可能会来回切换,您可能还需要考虑 Andrew Thompson 的回答——使用 CardLayout 可以将两个“屏幕”都保留在内存中,并消除大量手动工作来翻转他们之间。
【解决方案2】:

..在我的应用程序中,用户选择他们想要进行顶级测试的设备平台类型(该选择是左侧的一组两个单选按钮)。当用户选择 Android 或 iOS 时,复选框的中心分组会发生变化,以反映他们可以测试的一组 Android 设备或一组他们可以测试的 iOS 设备。

  1. 在“中心分组”中放置一个面板。
  2. 为面板使用CardLayout
  3. 使用卡片布局将 iOS 和 Android 控件添加到面板中。
  4. 根据需要在它们之间切换。

【讨论】:

    【解决方案3】:

    在顶级组件上调用revalidate()

    【讨论】:

    • 我是 Java 新手,所以请耐心等待我......究竟如何在顶级组件上调用 revalidate()?每次我尝试在 repaint() 之后插入它时,都会出现编译器错误。
    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2014-04-24
    • 2017-10-08
    • 2018-09-18
    相关资源
    最近更新 更多