Java 具有重写的paintComponent方法的子组件在JPanel顶部绘制组件
我有一个使用OverlyLayout布局管理器的父JPanel,该JPanel包含一个主面板和over-lay面板 乙二醇 这很好,但是主面板包含很多我无法控制的组件,很多组件已经覆盖了paintComponent,当它们重新绘制时,它们最终被绘制在覆盖面板的顶部 如果我调整整个窗口的大小,两个面板将正确堆叠显示。有没有办法防止出现这种情况,或者收到子组件已重新绘制的通知,以便重新绘制整个窗口Java 具有重写的paintComponent方法的子组件在JPanel顶部绘制组件,java,swing,Java,Swing,我有一个使用OverlyLayout布局管理器的父JPanel,该JPanel包含一个主面板和over-lay面板 乙二醇 这很好,但是主面板包含很多我无法控制的组件,很多组件已经覆盖了paintComponent,当它们重新绘制时,它们最终被绘制在覆盖面板的顶部 如果我调整整个窗口的大小,两个面板将正确堆叠显示。有没有办法防止出现这种情况,或者收到子组件已重新绘制的通知,以便重新绘制整个窗口 我确实尝试过使用JLayeredPane,但由于主窗口的大小可以调整,而且它没有使用LayoutMan
我确实尝试过使用JLayeredPane,但由于主窗口的大小可以调整,而且它没有使用LayoutManager,所以我不得不设置边界,我很难让它正常工作 通常情况下,面板包含以二维绘制的组件,因此您可以只重新绘制单个组件,而不会影响其他组件。绘画针对这种情况进行了优化 但是,在使用OverlayLayout时,零部件是在三维中绘制的,因此绘制单个零部件可能会影响其他零部件。因此,您需要删除默认情况下完成的优化绘制:
JPanel main = new JPanel()
{
@Override
public boolean isOptimizedDrawingEnabled()
{
return false;
}
};
main.setlayout( new OverlayLayout(main) );
main.add( overlayPanel );
main.add( backgroundPanel );
或者在您的情况下,看起来您正在扩展JPanel,因此您只需要重写isOptimizedDrawingEnabled()
方法
JPanel main = new JPanel()
{
@Override
public boolean isOptimizedDrawingEnabled()
{
return false;
}
};
main.setlayout( new OverlayLayout(main) );
main.add( overlayPanel );
main.add( backgroundPanel );