【问题标题】:Is there anyway to "pack" a JPanel?无论如何要“打包”一个JPanel吗?
【发布时间】:2014-10-06 00:43:54
【问题描述】:

有什么办法可以让我的 JPanel pack 像 JFrame 一样,或者做类似的事情。我想这样做而不是给它尺寸。如果需要任何补充信息,请发表评论。谢谢。

【问题讨论】:

  • pack 使用框架内容的首选大小来确定框架的最佳大小......因此,您需要拥有组件的大小才能使其正常工作。最好的选择是使用适当的布局管理器...见Laying Out Components Within a Container
  • 这可能是我一段时间以来听到的最糟糕的单一声明,抱歉。那么您的问题的答案是否定的,没有其他方法可以做到这一点,API 从一开始就是为了使用布局管理器而设计的。
  • 避免使用null 布局,像素完美的布局是现代用户界面设计中的一种错觉。影响组件单个尺寸的因素太多,您无法控制。 Swing 旨在与核心的布局管理器一起工作,丢弃这些将导致无穷无尽的问题和问题,您将花费越来越多的时间来尝试纠正。 Why is it frowned upon to use a null layout in SWING?
  • 一个布局管理器。您没有为您尝试解决的问题提供任何背景信息,因此无法为您提供可能更有用的解决方案或建议
  • What about a GroupLayout - 我们不知道您的要求是什么,您希望我们如何回答? GroupLayout 可能是最难学的。此外,没有理由使用单个布局管理器,因为您可以嵌套具有不同布局的面板。

标签: java jframe jpanel dimensions pack


【解决方案1】:

请尝试JPanel.updateUI,如果有帮助,请告诉我。

您应该在 Event Dispatcher 线程中进行 GUI 调用:

EventQueue.invokeLater(() -> {
    someJPanel.updateUI();
});

【讨论】:

  • 对我来说,updateUI 方法对调整 JPanel 的大小没有影响。
【解决方案2】:

如果我理解正确,您的 JPanel 不会自动(重新)调整大小,对吗?在这种情况下,您可以使用 Component.validate(或 JComponent.revalidate())

【讨论】:

  • 我真正的问题是 JPanel 不适合我放入其中的所有组件,所以你是对的。我的 JPanel 最初确实适合它的组件,所以当它不适合时,我告诉我的程序打包它,然后我不再需要担心它,而不是在添加更多组件时不断地手动调整它。我不完全明白如何使用你刚刚给我的代码。
  • @MattS, My JPanel does originally fit its components - 这就是您应该使用布局管理器的原因。如果您将组件添加到可见的 GUI,那么您只需 revalidate() 面板。发布您的SSCCE 来证明您的问题。您在上一个问题中也被要求这样做。
猜你喜欢
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
相关资源
最近更新 更多