这是在一个面板中叠加多个组件的正确方法吗?

时间:2011-11-23 19:58:11

标签: java swing jlayeredpane

我正在尝试将自定义透明度覆盖在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的情况下执行此操作?这对我来说似乎是个黑客。我的意思是,我真的无法相信在布置组件时没有选择这样做。但如果我不覆盖该方法,它会在顶部和左侧留下空隙。

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

1 个答案:

答案 0 :(得分:2)

OverlayLayout未设计为调整所有组件的大小以填充整个可用空间。实际上,您已创建了自定义布局管理器。这种方法没有错。

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

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