2012-04-18 1 views
0

を描く:は、私がフォロー特性を有する円を描きたいcricle

  • センターは、ユーザーが最初の半径は距離の長さでなければなりません
  • ウィンドウ上でマウスをクリックした時点でマウスが最初にクリックされたときとリリースされたとき(つまりマウスをドラッグしたとき)

は、ここで私がこれまで持っているものだが、私はそれが何をする必要があるかやっていない:

package assignment; 

import java.awt.*; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 

import javax.swing.*; 

public class DrawCircle extends JFrame implements MouseListener 
{ 
    private int centerX; 
    private int centerY; 
    private int endPtX; 
    private int endPtY; 
    private double radius; 
    private double w; 
    private double h; 
    private CirclePanel circPanel; 

    /** constructor **/ 
    public DrawCircle() 
    { 
     this.setTitle("Click to Draw Circle"); 
     this.setSize(500, 500); 
     this.setPreferredSize(new Dimension(500, 500)); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.setVisible(true); 
     this.setResizable(false); 
     this.addMouseListener(this); 
     this.circPanel = new CirclePanel(); 
     this.circPanel.setPreferredSize(new Dimension(500, 500)); 
     this.add(this.circPanel); 
     pack(); 
    } 

    public void mousePressed(MouseEvent e) 
    { 
     centerX = e.getX(); 
     centerY = e.getY(); 
     circPanel.set(centerX, centerY, radius, radius); 
     repaint(); 
     pack(); 
    } 

    public void mouseReleased(MouseEvent e) 
    { 
     endPtX = e.getX(); 
     endPtY = e.getY(); 

     radius = Math.sqrt(Math.pow(endPtX - centerX, 2) + Math.pow(endPtY - centerY, 2)); 
    } 
    public void mouseEntered(MouseEvent e) {} 
    public void mouseExited(MouseEvent e) {} 
    public void mouseClicked(MouseEvent e){} 



    //circle panel 
    private class CirclePanel extends JComponent 
    { 
     private int x; 
     private int y; 
     private int w; 
     private int h; 

     public void set(int x, int y, double width, double height) 
     { 
      this.x = x; 
      this.y = y; 
      w = (int) width; 
      h = (int) height; 
     } 

     public void paintComponent(Graphics g) 
     { 
      g.drawOval(x, y, w, h); 
     } 
    } 

    //main method 
    public static void main (String [] args) 
    { 
     new DrawCircle(); 
    } 
} 
+1

何していますか? – twain249

+0

全体的な考え方は、押されたマウスをドラッグして解放することで半径が決定されたJPanel上に円を描くことです – Haque1

答えて

1

あなたはshouldn間違った場所に

circPanel.set(centerX, centerY, radius, radius); 
repaint(); 
pack(); 

をやっているように見えます半径が設定されていてその半径が0になるので、ユーザーがマウスを離れるまで円を描きません。そのため、描画されるものはありません。それをmouseReleasedメソッドに移動してみてください。

+0

そのトリックはありましたが、円の中心は最初のマウスクリックの座標にありません。どのように私はこれを修正したのですか? – Haque1

+0

'drawOval'メソッドは、左上の座標で取る楕円の中心をとらない(xとyの値を変更する必要があるので、幅と高さは半径ではありません) radiusを 'drawOval'によって期待される値に置き換えます – twain249

+0

私はちょうどそれについてここに質問を掲示しました:http://stackoverflow.com/questions/10219349/java-is-there-any-easy-way-to-draw-a-あなたはこれを説明する方法を知らない – Haque1