我正在尝试绘制一个简单的图形并使用以下代码来管理图形坐标系:
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等时,数字似乎都是一样的。
有什么我不做的吗?
答案 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时重新显示显示没有任何效果。
尚无解决方案。