Java JPanel定制涂料

Java JPanel定制涂料,java,swing,jpanel,paint,Java,Swing,Jpanel,Paint,我在画一个JPanel时遇到了一个问题。它正确地绘制,但是当我调整父容器的大小时,JPanel会在窗口的左上角以及正确的位置绘制 JPanel有一个自定义绘制方法,用于绘制不属于任何JPanel(包括它)的一组组件。在调用它们的绘制方法之前,会立即将它们添加到JPanel中,并在以下操作之后立即删除: paintOnto.setIgnoreRepaint(true); paintOnto.add(getPaintableComponent()); getPaintableCompon

我在画一个JPanel时遇到了一个问题。它正确地绘制,但是当我调整父容器的大小时,JPanel会在窗口的左上角以及正确的位置绘制

JPanel有一个自定义绘制方法,用于绘制不属于任何JPanel(包括它)的一组组件。在调用它们的绘制方法之前,会立即将它们添加到JPanel中,并在以下操作之后立即删除:

  paintOnto.setIgnoreRepaint(true);
  paintOnto.add(getPaintableComponent());
  getPaintableComponent().paint(g);
  paintOnto.remove(getPaintableComponent());
  paintOnto.setIgnoreRepaint(false);
paintOn是对JPanel的引用,getPaintableComponent()返回要绘制的JComponent。g是从JPanel绘制方法传递的图形对象

mac中根本不需要添加/删除代码,但在没有添加/删除代码的windows下,组件根本就不需要绘制

这个问题只存在于windows和ubuntu中,而不存在于mac中。其他系统未经测试

知道是什么引起的吗?无论何时喷漆,我都会检查JPanel的位置,但它从未位于左上角


感谢尝试在绘制前保存
图形的
仿射变换
,并在绘制后还原它。

对不起,我不熟悉仿射变换,找不到属于图形对象的任何引用,能否提供代码段?将图形强制转换为Graphics2D并使用公共仿射变换getTransform()方法。谢谢,我已经这样做了,但这并没有解决问题。我发现,我动态添加到视图中的每个组件都被绘制了两次,一次在正确的位置,一次在相同的位置,但相对于一个组件大约3层。有没有一种方法可以在屏幕上绘制一个组件而不将其添加到con泰纳?我每次尝试都会遇到一个窗口异常。尝试禁用doublebuffering@GuillaumePolet你真是个天才!!我已经研究了两天了!我很想知道是什么引起的,但至少现在它已经修复了:)非常感谢