用覆盖涂料组件方法的子组件将组件绘制在Jpanel顶部



i有一个父jpanel,它使用了OverlayOut布局管理器,JPANEL包含一个主面板和外部面板。

例如

setLayout(new OverlayLayout(this));
add(overlayPanel)
add(mainPanel);

这很好,但是主面板包含我控件之外的许多组件,许多组件都超过了油漆component,当它们重新涂漆时,它们最终被绘制在覆盖面板的顶部。

如果我调整了整个窗口的大小,则2个面板显示正确堆叠。有什么方法可以防止此问题或收到一个通知,表明儿童组件已重新绘制,以便我可以重新粉刷整个窗口?

我确实尝试使用jlayeredpane,但是我很努力,因为可以调整主窗口的大小,并且由于它不使用Layoutmanager,所以我必须设置界限,我努力地将其努力工作。

通常,面板包含在2个维度上绘制的组件,因此您可以重新粉刷一个组件,并且不会影响其他组件。绘画针对这种情况进行了优化。

但是,当使用覆盖层时,将组件涂成3个维度,因此绘画单个组件会影响其他组件。因此,您需要删除默认情况下完成的优化绘画:

JPanel main = new JPanel()
{
    @Override
    public boolean isOptimizedDrawingEnabled()
    {
        return false;
    }
};
main.setlayout( new OverlayLayout(main) );
main.add( overlayPanel );
main.add( backgroundPanel );

或在您的情况下,看起来您正在扩展jpanel,因此您只需要覆盖isOptimizedDrawingEnabled()方法。

最新更新