2015-08-08 44 views
2

我想做一個簡單的繪畫程序。所以,當你拖動鼠標時,一條線會在GUI中繪製。問題是當用戶拖動鼠標時,它會自動繪製,但我的代碼不起作用。有人可以告訴我這是怎麼回事?對不起,我的英文,如果你不明白我的問題,看看我的代碼,也許你會比。Java繪畫程序給出了很多錯誤

我的主類:

import javax.swing.JFrame; 
public class MainClass { 
    public static void main(String args[]){ 
     tuna kip = new tuna(); 
     kip.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     kip.setSize(800,600); 
     kip.setVisible(true); 
    } 
} 

這是我的其他類:

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

public class tuna extends JFrame { 
    JPanel jpanel = new JPanel(); 

    public tuna(){ 
     super("Painting Program"); 
     jpanel.setBackground(Color.WHITE); 
     add(jpanel); 

     hand handler = new hand(); 
     jpanel.addMouseListener(handler); 
     jpanel.addMouseMotionListener(handler); 
    } 

    private class hand implements MouseListener ,MouseMotionListener { //THE ERRORS START TO APPEAR HERE 
     public void mouseDragged(MouseEvent event){ 
      public void paintComponent(Graphics g){ 
       super.paintComponent(g); 
       g.setColor(Color.BLACK); 
       g.fillRect(event.getX(), event.getY(), 5, 5); 
      } 
     } 
    } 
} 
+0

而錯誤信息是? – Jens

+0

這段代碼甚至不能被編譯 –

+0

當我嘗試運行代碼時,我得到了太多錯誤信息,總共有大約7萬個字符。但是他們都在討論java.awt ... – OpenGLmaster1992

回答

2

是的,你的代碼有太多問題。我只是編輯它,並至少讓它運行。只要學習和實驗即可。即使我沒有解釋所有的變化,我希望你會從中學到一些東西。

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

public class tuna extends JFrame { 
    int x, y, w, h; 

    MyPanel jpanel = new MyPanel(); 

    public tuna(){ 
     super("Painting Program"); 
     setLayout(new BorderLayout()); 
     jpanel.setBackground(Color.WHITE); 
     add(jpanel); 

     hand handler = new hand(); 
     jpanel.addMouseListener(handler); 
     jpanel.addMouseMotionListener(handler); 
    } 

    private class hand implements MouseListener , MouseMotionListener { //THE ERRORS START TO APPEAR HERE 
     public void mouseClicked(MouseEvent e) { 
     } 

     public void mousePressed(MouseEvent e) { 
      x=e.getX(); 
      y=e.getY(); 
     } 

     public void mouseReleased(MouseEvent e) { 
     } 

     public void mouseEntered(MouseEvent e) { 
     } 

     public void mouseExited(MouseEvent e) { 
     } 

     public void mouseDragged(MouseEvent e) { 
      w = e.getX() - x; 
      h = e.getY() - y; 
      jpanel.repaint(); 
     } 

     public void mouseMoved(MouseEvent e) { 
     } 
    } 

    class MyPanel extends JPanel { 
     public void paintComponent(Graphics g){ 
      super.paintComponent(g); 
      g.setColor(Color.BLACK); 
      g.fillRect(x, y, w, h); 
     } 
    } 
} 
+0

非常感謝你,我明白GUI更好:) – OpenGLmaster1992

4

當我嘗試運行代碼我得到了太多的錯誤消息:

你的意思是當你嘗試compile你得到的代碼編譯錯誤。

class hand implements MouseListener ,MouseMotionListener 

你的類沒有在這些監聽器中實現所有的方法。你只實現一種方法。

閱讀Swing教程中關於How to Write a MouseMotionListener的部分以獲取工作示例。

如果你只關心mouseDragged()方法,那麼你只需要實現MouseMotionListener

或者作爲更簡單的解決方案,您可以擴展MouseMotionAdapter。該類實現了MouseMotionListener的所有方法,因此您只需要覆蓋要更改的方法。本教程還討論適配器。

最後類名應該以大寫字母開頭。看看Java API,你會注意到這一點。遵循Java約定,不要自己編寫。

+0

謝謝,我修復了mousemotionlistener問題,但是當我拖動鼠標時嘗試繪製某些東西時,Eclipse提供了太多錯誤。我認爲public void paintComponent(Graphics g){拖動鼠標時畫的東西是錯誤的。你能告訴我如何以正確的方式執行此代碼: public void mouseDragged(MouseEvent event){ public void paintComponent(Graphics g){ super.paintComponent(g); g.setColor(Color.BLACK); g.fillRect(event.getX(),event.getY(),5,5); – OpenGLmaster1992

+0

@HugoCornel,查看[自定義繪畫方法](https://tips4java.wordpress.com/2009/05/08/custom-painting-approaches/),瞭解拖動鼠標時如何繪製矩形的工作示例。您將需要修改代碼來繪製一條簡單的線條,但概念是相同的。 – camickr