2016-05-07 10 views
0

マウスのx座標とy座標でマウスを押すと、魚を描画するためにこれを作成します。しかし、私は、ドロビの方法が呼び出されていないようです。私はなぜそれが動作していない理由を見つけることができません。私はどんな助けにもとても感謝しています。画像を描画するJava Mousepress()

/*FishTank*/ 
    import java.awt.Graphics; 
    import javax.swing.JComponent; 
    import javax.swing.JFrame; 
    import java.awt.event.*; 
    import javax.swing.*; 
    import java.awt.*; 
    import java.awt.geom.*; 
    /*FishTank class-contains a frame and the WinstonCanvas.*/ 
    public class FishTank{ 

    public static void main (String[] args){ 
     javax.swing.SwingUtilities.invokeLater(new Runnable(){ 
    public void run(){ 
      JFrame window = new JFrame(); 
      window.setTitle("Fish Tank"); 
      window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      window.setBounds(30, 30, 700, 430); 
      window.getContentPane().add(new FishTankCanvas()); 
      window.setVisible(true); 
     } 
     }); 
    } 
    } 
    /*FishTankCanvas is a component that allows drawing shapes.*/ 
    class FishTankCanvas extends JComponent { 
    static Graphics2D g; 
    int x = 11; 
    Timer myTimer; 
    public FishTankCanvas(){ 
     myTimer = new Timer (2, new ActionListener(){ 
     public void actionPerformed (ActionEvent evt){ 
      repaint(); 
     } 
     }); 
     myTimer.start(); 
    } 

    public void paint(Graphics graphics) { 
     g = (Graphics2D)graphics; 
     //makes the background white 
     Color backgroundColor = new Color(89, 216, 255);//light blue 
     g.setColor(backgroundColor); 
     g.fillRect(0,0,this.getWidth(),this.getHeight()); 

     // drawfish (Graphics graphics, int bodyX, int bodyY, int   bodyLength,int bodyHeight, int tailwidth, int eyesize,int tailcolor, int bodycolor) 

     // Mouselistener and mouseadapter 
     this.addMouseListener (new MouseAdapter() { 
     public void mousePressed(MouseEvent e) { 
      //call drawfish method 
      drawfish(FishTankCanvas.g,e.getX(), e.getY(),118,74,1,((int)   (Math.random()*(4 - 0)))); 
      repaint(); 
     } 
     }); 

     // x coordinate plus 1 of fish (animate) 
     x= x + 1; 
    } 
    // drawfish method 
    public void drawfish(Graphics graphics, int bodyX, int bodyY, int  bodyLength,int bodyHeight,int tailcolor, int bodycolor){ 

     Graphics2D g = (Graphics2D)graphics; 
     bodyX +=x; 
     //colours 
     Color[] colours= new Color[5]; 
     colours[0] = new Color(0, 0, 0);//black 
     colours[1] = new Color(162, 0, 255);//purple 
     colours[2] = Color.red;//red 
     colours[3] = new Color(255,255,0);// yellow 
     colours[4] = new Color(60,179,113);//green 

     //draw fish 
     // body 
     g.setColor(colours[bodycolor]); 
     g.fillOval(bodyX, bodyY, bodyLength, bodyHeight); 
     // tail 
     g.setColor(colours[tailcolor]); 
     int tailWidth = bodyLength/4; 
     int tailHeight = bodyHeight/2; 
     int[] tailPointx = new int[3]; 
     int[] tailPointy = new int[3]; 
     tailPointx[0]=bodyX; 
     tailPointy[0]=bodyY+bodyHeight/2; 
     tailPointx[1]=bodyX-tailWidth; 
     tailPointy[1]=bodyY+bodyHeight/2-tailHeight; 
     tailPointx[2]=bodyX-tailWidth; 
     tailPointy[2]=bodyY+tailHeight+tailHeight; 
     g.fillPolygon(tailPointx, tailPointy, 3); 
     // eye 
     g.setColor(colours[0]); 
     g.fillOval(bodyX+3*bodyLength/4, bodyY+bodyHeight/2-bodyHeight/5,   bodyHeight/5, bodyHeight/5);  
    } 
    }  

答えて

3

私はdrawfishメソッドが呼び出されていないことを、次にようです。

確認するのは簡単です。デバッグコードをメソッドに追加して、これが真であるかどうかを判断するだけです。それが推測ではなく問題であるかどうかを教えてください。

その他の問題:

  1. 塗装方法でコンポーネントにするMouseListenerを追加しないでください。リスナーは、クラスのコンストラクタに追加する必要があります。

  2. paint()をオーバーライドしないでください。カスタムペインティングは、paintComponent()メソッドをオーバーライドして行います。そして、super.paintComponent(...)を呼び出すことを忘れないでください。

  3. JComponentではなくJPanelを拡張します。次に、setBackground()メソッドを使用して背景をペイントすることができます。

はしかし、本当の問題は、マウスをクリックしたときに魚が描かれてしまうかもしれませんということですが、その後、タイマーはあなたが本当に魚を見たことがないので、後でパネル2msのがクリアされます再描画を行います。タイマーを取り除く。 Timerが魚を描く必要はありません。

複数の魚をペイントしたい場合、クリックしたすべての場所を追跡し、すべての魚をペイントする必要があると仮定します。これには2つの方法は、次のとおりです。

  1. は、あなたがたBufferedImageに魚をペイント魚をペイントしてから塗装方法
  2. にこのリストを反復処理したいポイントのArrayListにしてくださいときマウスクリック画像をペイントするだけです。

Custom Painting Approachesを参照してください。

関連する問題