2010-05-14 65 views
1

我正在开发一个使用Java2d的应用程序。我注意到的奇怪之处在于,起点在左上角,正x向右,正y向下。Java2d:翻译轴

有没有办法将原点左移?

谢谢。

+0

不幸的是,大多数的GUI系统的标准轴布局,它来自回来时,一切都基于文本的这样左上角是有道理的文本来源。大多数GUI工具包会让你翻转原点和坐标轴,但我的建议是只是习惯它:) – luke 2010-05-14 03:22:58

回答

5

你将需要做一个规模和翻译。

paintComponent方法,你可以这样做:

public void paintComponent(Graphics g) 
{ 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.translate(0, -height); 
    g2d.scale(1.0, -1.0); 
    //draw your component with the new coordinates 

    //you may want to reset the transforms at the end to prevent 
    //other controls from making incorrect assumptions 
    g2d.scale(1.0, -1.0); 
    g2d.translate(0, height); 
} 

我的挥杆是一个有点生疏,但是这应该完成的任务。

+0

我不喜欢你如何设置比例/翻译回来。在这种特殊情况下,它*应该是可以的,但是一般情况下,当堆叠变换时,您将累积浮点错误。最好调用getTransform,然后setTransform来恢复原始。 – 2010-07-22 03:45:34

0

你会想要习惯它。像卢克提到的那样,您技术上可以对图形实例应用转换,但最终会对性能产生负面影响。

只要做一个平移就可以将0,0的位置移动到左下方,但沿着正轴的移动仍然在x方向上是正确的,而在y方向上是下移的,所以你唯一能做的就是从屏幕上绘制一切。你需要做一个旋转来完成你所要求的,这会将弧度计算的开销加到图形实例的变换矩阵上。这不是一个好的折衷。

2

我们可以使用下面的方法可以轻松地解决这个问题,

public void paintComponent(Graphics g) 
{ 
Graphics2D g2d = (Graphics2D) g; 
// Flip the sign of the coordinate system 
g2d.translate(0.0, getHeight()); 
g2d.scale(1.0, -1.0); 
...... 
}