2016-11-28 41 views
-1

在我的程序中,開始時我希望球停滯並在點擊鼠標時開始動作。如何將鼠標事件添加到Java中的繪圖對象?

我需要什麼樣的方法來跟進?

我嘗試以下操作:

public class Ball extends Applet implements Runnable{ 

     int x=200; 
     int y=450; 
     int dx=10; 
     int dy=10; 
     int r=30; 
     private Image i; 
     private Graphics graph; 
     @Override 
     public void init() { 

      setSize(500,500); 

     } 

     @Override 
     public void start() { 
      Thread t1=new Thread(this); 
      t1.start(); 

     } 
     @Override 
     public void run() { 

      while(true){ 
       if(x+dx>this.getWidth()-r){ 
        x=this.getWidth()-r; 
        dx=-dx; 
       } 
       else if(x+dx<0){ 
        x=0; 
        dx=-dx; 
       } 
       else{ 
        x+=dx; 
       } 
       if(y+dy>this.getHeight()-r){ 
        y=this.getHeight()-r; 
        dy=-dy; 
       } 
       else if(y+dy<0){ 
        y=0; 
        dy=-dy; 
       } 
       else{ 
        y+=dy; 
       } 
       repaint(); 
       try { 
        Thread.sleep(50); 
       } catch (InterruptedException ex) { 
        ex.printStackTrace(); 
       } 

      } 
     } 



     @Override 
     public void stop() { 

     } 

     @Override 
     public void destroy() { 

     } 

     @Override 
     public void update(Graphics g) { 
      //double buffering 
      if(i==null){ 

       i=createImage(this.getSize().width,this.getSize().height); 
       graph=i.getGraphics(); 
      } 

      graph.setColor(getBackground()); 
      graph.fillRect(0, 0, this.getSize().width, this.getSize().height); 
      graph.setColor(getForeground()); 
      paint(graph); 
      g.drawImage(i, 0, 0, this); 

     } 

     @Override 
     public void paint (Graphics g){ 

      g.setColor(Color.PINK); 
      g.fillOval(x, y, r, r); 
     } 


    } 

回答

1

您必須添加一個鼠標監聽,你的情況,你可以檢查方法的mousePressed或的mouseClicked

入住這裏:https://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html

你可以創建你的MouseListener MouseListener ms = new MouseListener(); 它將生成的MouseListener的方法,那麼你只需要修改你想要的(或的mousePressed的mouseClicked),完成不要忘記添加莫useListener到要被傾聽object.addMouseListener(ms);

+0

雖然此鏈接可以回答這個問題的對象,最好是在這裏有答案的主要部件,並提供鏈接以供參考。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/評論/低質量帖/ 14430918) – Aurora0001

+1

我只是編輯它,希望這是好現在:-) – BinaryDump

+0

現在這是一個更好的答案。順便說一下,當您在SO上修改您的帖子時,通常不需要包含「修改:」,這與其他網站不同,因此我已經爲您編輯了該文件,但您現在應該不在低質量文章過濾器中已經改進了這個職位。 – Aurora0001

相關問題