Java AffineTransform视图更改

时间:2014-02-14 19:15:49

标签: java graphics2d affinetransform

我正在尝试绘制一个简单的图形并使用以下代码来管理图形坐标系:

Graphics2D g2d = (Graphics2D) g;

// Save the current transform to put it back the way I found it
saveAT = g2d.getTransform();

int height = getHeight();
// Get the get the magnitude of the sample
long scale = thePlotArray.getRealScale();

// Set the x origin at 0 and the y origin in the center of the window
double yTrans = ((double)height)/2.0;
AffineTransform tform = AffineTransform.getTranslateInstance( 0.0, yTrans);

// set the y scale to show all of the sample
double yScale = ((double)height) / ((double)scale);
tform.scale(1, yScale);
g2d.setTransform(tform);

// Plot the data with a series of 
g2d.drawLine(x1,  y1, x2, y2);

// reset the transform back
g2d.setTransform(saveAT);

看起来效果很好,直到我调整窗口大小,然后原点跳起大约窗口的十分之一。当我打印出高度,比例,yTrans等时,数字似乎都是一样的。

有什么我不做的吗?

1 个答案:

答案 0 :(得分:0)

我遇到过同样的问题(简单的条形图)。绘画方法是:

public void paintComponent(Graphics g){
    super.paintComponent(g);
    if(_data==null){
        return;
    }

    int bars = _data.length;
    int width = this.getSize().width/bars;
    int height = this.getSize().height;

    Graphics2D g2d = (Graphics2D)g.create();
    AffineTransform flip = new AffineTransform();
    flip.translate(0, height);
    flip.scale(1, -1);
    g2d.setTransform(flip);

    //Painting code via g2d.drawRect(), g2d.fillRect()

}

我的显示面板嵌入在另一个面板中。每当调用display.componentResized()时,似乎会导致原点转换大约24个点。我将此作为MVC演示的一部分,对于某些生成重绘的事件(无论是否调整显示中的值),原点似乎都正确地重置为(0,0)。

进一步的故障排除显示只有当JTabbedPane中存在此显示面板时才会出现该错误。例如,添加MouseListener以重新绘制mouseMoved()操作上的显示,解析了原点。

在标签之间切换可以恢复问题。尝试在处理ChangeEvent时重新显示显示没有任何效果。

尚无解决方案。