2010-05-14 64 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); 
...... 
}