【问题标题】:Is this the proper way to overlay multiple components in one panel?这是在一个面板中覆盖多个组件的正确方法吗?
【发布时间】:2011-11-23 19:58:11
【问题描述】:

我正在尝试在 JPanel 的顶部覆盖自定义透明度。我希望这两个组件都延伸到分层窗格的边缘。我已经覆盖了顶部组件的paintComponent 方法,通常什么都不做,除非我想显示覆盖。然后它在适当的位置绘制适当的文本。

这是我对布局问题的解决方案:

JLayeredPane jlp = new JLayeredPane();
jlp.setLayout(new OverlayLayout(jlp) {
    @Override
    public void layoutContainer(Container target) {
        for (Component c: target.getComponents())
            c.setBounds(0, 0, target.getWidth(), target.getHeight());
    }
});

问题是 - 有没有更好的方法可以在不覆盖 layoutContainer 的情况下做到这一点?这对我来说似乎是一个黑客行为。我的意思是,我真的不敢相信在布局组件时没有这样做的选项。但如果我不重写该方法,它会在顶部和左侧留下空隙。

我在这里遗漏了什么,或者这是处理这些要求的正确方法吗?

【问题讨论】:

    标签: java swing jlayeredpane


    【解决方案1】:

    OverlayLayout 的设计目的不是为了让所有组件的大小都能填满整个可用空间。实际上,您已经创建了一个自定义布局管理器。这种方法没有任何问题。

    我不确定您为什么使用 JLayeredPane。您应该能够只使用带有 OverlayLayout 和多个组件的常规 JPanel。

    或者,如果您想使用 JLayeredPane,那么您可能不需要 OverlayLayout。您可以将 ComponentListener 添加到分层窗格中,并在生成调整大小的事件时调整所有组件的大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      相关资源
      最近更新 更多