2012-05-30 25 views
5

//我試圖學習如何在java中繪製對象。我越來越好,但是一旦我在屏幕上看到一張圖像,我就無法操縱它。我輸入的數字對形狀的變化沒有意義。至少對我來說他們沒有。在代數中,如果你在x軸上增加一個數字,它會向右移動,如果你在y軸上增加一個數字,它會增加。這不是什麼在這裏發生。任何人都可以向我解釋這是如何工作的?我對Java還是一個新手,所以更多的解釋和細節會更好。我想在我的暑假裏每天花幾個小時學習java,有時候會感到有點沮喪。任何幫助是極大的讚賞。在JFrame中使用座標平面

+3

在Java中,(0,0)位於左上角。 – Jeffrey

+3

此[鏈接](http://docs.oracle.com/javase/1.4.2/docs/guide/2d/spec/j2d-intro.html#wp61857)可能會有所幫助。 – bacchus

+3

這個[示例](http://stackoverflow.com/a/9373195/230513)討論了笛卡爾和屏幕座標之間的轉換。 – trashgod

回答

6

這裏從屏幕的TOP LEFT SIDE,因爲當你增加的X價值,你會走向RIGHT SIDE移動,但如果增加的Y的價值,你就進入DOWNWARDSCo-ordinates開始。下面是一個小例子程序,您可以更好地理解這一點,只需在任何地方點擊即可。

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class DrawingExample 
{ 
    private int x; 
    private int y; 
    private String text; 
    private DrawingBase canvas; 

    private void displayGUI() 
    { 
     JFrame frame = new JFrame("Drawing Example"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     canvas = new DrawingBase(); 
     canvas.addMouseListener(new MouseAdapter() 
     { 
      public void mouseClicked(MouseEvent me) 
      { 
       text = "X : " + me.getX() + " Y : " + me.getY(); 
       x = me.getX(); 
       y = me.getY(); 
       canvas.setValues(text, x, y); 
      } 
     }); 

     frame.setContentPane(canvas); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String... args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new DrawingExample().displayGUI(); 
      } 
     }); 
    } 
} 

class DrawingBase extends JPanel 
{ 
    private String clickedAt = ""; 
    private int x = 0; 
    private int y = 0; 

    public void setValues(String text, int x, int y) 
    { 
     clickedAt = text; 
     this.x = x; 
     this.y = y; 
     repaint(); 
    } 

    public Dimension getPreferredSize() 
    { 
     return (new Dimension(500, 400)); 
    } 

    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     g.drawString(clickedAt, x, y); 
    } 
} 
+0

哦,很酷。這很棒。 –

+0

@MartinMarino:謝謝並保持微笑:-) –

+0

代碼是說它無法找到符號類DrawingBase。錯誤是私人的「DrawingBase」畫布; canvas = new「DrawingBase」();引號是顯示實際錯誤來自哪裏。我很感激幫助,但我不知道如何解決這個問題。我能獲得更多的幫助嗎? –