2012-11-27 60 views
0

我目前正在嘗試編寫一個Java應用程序,該程序允許寫意畫和後來的移動和刪除每個繪製的圖形。用手繪圖撤消和移動功能

我猜我最好的選擇是每次點擊和拖動創建一個單獨的實體,但我不知道如何實現這一點。到目前爲止,我只有一個小型的JFrame,它會在Oracle教程的幫助下顯示一個「筆刷」,但是甚至不會畫出這個筆畫的線條。

class MyPanel extends JPanel { 

    private int ovalX = 50; 
    private int ovalY = 50; 

    public MyPanel() { 
     setBorder(BorderFactory.createLineBorder(Color.black)); 

     addMouseListener(new MouseAdapter() { 
      public void mousePressed(MouseEvent e) { 
       moveSquare(e.getX(),e.getY()); 
      } 
     }); 

     addMouseMotionListener(new MouseAdapter() { 
      public void mouseDragged(MouseEvent e) { 
       moveSquare(e.getX(),e.getY()); 
      } 
     }); 
    } 

    private void moveSquare(int x, int y) { 
     int OFFSET = 1; 
     if ((ovalX!=x) || (ovalY!=y)) { 
      ovalX=x; 
      ovalY=y; 
      repaint(); 
     } 
    } 

    public Dimension getPreferredSize() { 
     return new Dimension(250,200); 
    } 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g);  


     g.setColor(Color.BLACK); 
     g.fillOval((ovalX - 5),(ovalY - 5),10,10); 
    } 
} 

我不知道我該如何繼續。我應該首先使用一些通用教程嗎?如果是這樣,關於什麼主題?

+0

*「我猜我最好的選擇是讓每個點擊並拖動創建一個單獨的實體,但我不知道如何實現這一點。「*不要忘記用於生成圖形的'Color','Stroke','RenderingHints'等。它比你想象的更加艱難。當部分完成爲[繪畫撤銷/重做功能]創建許多這些東西的序列化版本時(http://stackoverflow.com/questions/12780063/command-pattern-for-undo-redo-in-paint-application) ,我認爲創建結果的'BufferedImage'更容易,並且存儲它。 –

+0

我理想中的想法是存儲某種波形的光柵圖像,而不是所有的點和屬性。然後我會注意到查看一些BufferedImage教程。 – Klaabu

回答

3

有很多不同的主題,這將有所幫助。一些核心/基本的人的將包括

這我會建議你將需要的

升值我會扔Creating a GUI With JFC/Swing爲它討論了諸如鍵綁定和鼠標監聽器之類的事情。

我還熟悉Working with Images爲undoubtly你會想保存和載入圖像,以及

+0

啊,是的,第一個是讓我走得這麼遠。感謝您的幫助,我一定會檢查其他人。 – Klaabu