2011-11-23 33 views
2

我想覆盖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?这对我来说似乎是一个黑客。我的意思是,我真的不敢相信,在布置组件时没有办法做到这一点。但如果我不覆盖这个方法,它会在顶部和左侧留下空隙。

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

回答

2

OverlayLayout并未设计用于调整所有组件以填充整个可用空间。实际上你已经创建了一个定制的布局管理器。这种方法没有错。

我不知道你为什么使用JLayeredPane。您应该可以使用带OverlayLayout和多个组件的常规JPanel。或者,如果你想使用JLayeredPane,那么你可能不需要OverlayLayout。您可以将ComponentListener添加到分层窗格,并在生成调整大小的事件时调整所有组件的大小。

相关问题