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()
方法。