2012-04-04 127 views
2

我在绘制JPanel时遇到问题。它正确绘制,但是当我调整父容器的大小时,JPanel被绘制在窗口的左上角以及正确的位置。JPanel定制绘图

JPanel有一个自定义绘画方法,绘制一组不属于任何JPanel的组件(包括它)。这些被添加到的JPanel立即他们的油漆方法被调用之前,并且之后立即移除:

paintOnto.setIgnoreRepaint(true); 
    paintOnto.add(getPaintableComponent()); 
    getPaintableComponent().paint(g); 
    paintOnto.remove(getPaintableComponent()); 
    paintOnto.setIgnoreRepaint(false); 

paintOnto是JPanel中,getPaintableComponent(基准)返回一个JComponent待绘制。 g是从JPanel绘画方法传入的Graphics对象。

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

此问题仅出现在Windows和Ubuntu中,而不是mac。其他系统未经测试。

任何想法可能导致它?我已经检查过JPanel的位置,并且它永远不会位于左上角。

感谢

回答

2

尽量节省graphics之前的AffineTransform和涂装后恢复。

+0

对不起,我对AffineTransform并不熟悉,并且找不到任何对它属于Graphics对象的引用,你能提供一个代码片段吗? – 2012-04-04 10:08:37

+0

将图形转换为Graphics2D并使用公共AffineTransform getTransform()方法。 – StanislavL 2012-04-04 10:56:53

+0

谢谢,我已经这样做了,但没有解决问题。我发现我动态添加到视图中的每个组件都被绘制两次,一次位于正确位置,一次位于相同位置,但相对于大约3层的组件。 有没有将组件绘制到屏幕上而不将其添加到容器的方法?每当我尝试时我都会看到一个窗口异常。 – 2012-04-04 11:26:25