Java 这是在一个面板中覆盖多个组件的正确方法吗?

Java 这是在一个面板中覆盖多个组件的正确方法吗?,java,swing,jlayeredpane,Java,Swing,Jlayeredpane,我试图在JPanel的顶部覆盖一个自定义透明度。我希望两个组件都延伸到分层窗格的边缘。我已经覆盖了顶部组件的paintComponent方法,通常不执行任何操作,除非我想显示覆盖。然后在适当的位置绘制适当的文本 以下是我对布局问题的解决方案: JLayeredPane jlp = new JLayeredPane(); jlp.setLayout(new OverlayLayout(jlp) { @Override public void layoutContainer(Cont

我试图在
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
?对我来说,这似乎是一种恶作剧。我的意思是,我真的不敢相信在布置组件时没有这样做的选项。但如果我不重写该方法,它会在顶部和左侧留下间隙


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

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

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

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