【问题标题】:Why shouldn't I call setVisible(true) before adding components?为什么我不应该在添加组件之前调用 setVisible(true)?
【发布时间】:2021-08-02 07:54:36
【问题描述】:

我已经多次看到这个网站上写过它(例如herehere),在将组件添加到JComponent之前,您不能调用setVisible(true),但我没有没看到解释,网上的资料好像很少。

为什么会这样,如果你违反规则会发生什么?

【问题讨论】:

  • 你能提供他们所说的来源吗?
  • 从视觉的角度来看,看到一个仍在添加新东西的组件似乎很草率(当然,除非这是用户的预期行为)。

标签: java swing


【解决方案1】:

放大@Hovercraft 的有用分析,您可能还需要重新pack() 封闭的顶级容器。这个examplesetVisible() 之后将元素添加到JList,可以说明权衡。

【讨论】:

    【解决方案2】:

    如果你先调用它,你不会破坏任何东西,但如果你添加了任何东西,你可能需要再次调用它。否则 Swing 不会渲染添加的组件。您需要让 JVM 调用 JFrame 的 paint(...) 方法来渲染 JFrame 的组件,setVisible(true) 将要求 JVM 执行此操作。如果您曾经在调用 setVisible(true) 之后添加过组件并且没有看到这些组件,那么您会发现如果您重新调整 JFrame 的大小,它们就会“物化”。这是因为重新调整大小会导致操作系统要求 Swing 重新绘制 GUI,这将导致调用 paint(...)

    请注意,如果您在创建 GUI 之后添加组件,您可以在其容器上调用 revalidate() 并且经常调用 repaint() 以正确布局并渲染新组件。 repaint()绝对如果组件的更改涉及删除,或者在先前可视化另一个组件的位置绘制组件。

    强烈推荐的一本书建议:Filthy Rich Clientsbuy Guy and Haase。就买吧!您不会后悔购买。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 2012-01-22
      • 2019-07-14
      • 1970-01-01
      相关资源
      最近更新 更多