2012-11-15 2 views
0

원형 차트에 값과 임의 색상을 그릴 코드가 있습니다. 이제 저는 파이 한 개가 아닌 전체 그림을 회전시키고 싶습니다.Java에서 원형 차트를 회전하는 방법

행 AA에서
class Slice{ 

    double value; 
    Color color; 
    public Slice(double _value){ 
     this.value = _value;  
    } 
    public void setColor(Color _color){ 
     this.color = _color; 

    } 
} 

class Component extends JComponent implements MouseListener{ 

    int movx = 0; 
    int movy = 0; 

    Slice[] slice = {new Slice(5),new Slice(20),new Slice(33),new Slice(55)}; 
    public Component(){ 
     addMouseListener(this); 
    } 

    public void paint(Graphics g){ 
     Graphics2D g2 = (Graphics2D)g; 
     drawPie(g2, getBounds(), slice); 

    } 
    public void drawPie(Graphics2D g, Rectangle area, Slice[] s){ 
     double total = 0.0D; 
     //calculate total value 
     for(int i=0;i<s.length;i++) 
      total+=s[i].value; 

     double curentValue = 0.0D; 
     int startAngle = 0; 
     for(int i = 0;i<s.length;i++){ 
      Random numGen = new Random(); 
      s[i].setColor(new Color(numGen.nextInt(256), numGen.nextInt(256), numGen.nextInt(256))); 
      startAngle = (int)((curentValue*360)/total); 
      int arcAngle = (int)((s[i].value*360)/total) ; 
      g.setColor(s[i].color); 
      g.rotate(30);//row AA 
      g.fillArc(area.x, area.y, area.width, area.height, startAngle, arcAngle); 

      curentValue+=s[i].value; 

     } 
    } 

    @Override 
    public void mouseClicked(MouseEvent e) { 
     // TODO Auto-generated method stub 
     movx = e.getX(); 
     movy = e.getY(); 
     repaint(); 
    } 

    // unimplemented Mouse methods removed 
} 

public class PieChart { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     JFrame frame = new JFrame(); 
     frame.getContentPane().add(new Component()); 
     frame.setSize(300,200); 
     frame.setVisible(true); 
    } 
} 

내가 rotate 쓰기, 정상적으로 작동하지 않을 수 있습니다 : 여기 내 코드는? 너 나 좀 도와 줄 수있어? 전체 차트를 회전하려면 어떻게해야합니까?

답변

2

Graphics2D.rotate의 인수는 라디안 단위입니다. http://en.wikipedia.org/wiki/Radian#Conversion_between_radians_and_degrees

는 전체 차트를 회전하려면

http://docs.oracle.com/javase/6/docs/api/java/awt/Graphics2D.html#rotate%28double%29

, 당신은 루프가 아니라에서 drawPie 방법의 시작 부분에 회전의 코드를 삽입해야합니다.

+0

나는 그것을 알고있다, 나는 모든 차트, 차트의 모든 요소를 ​​회전시키고 싶다. 360도는 더 이상 예도가 아니다. –

+0

OK, 나는 대답을 편집했지만, 나는 아직도 당신이 이해하지 못한다고 생각한다. radians *를 rotate 메소드에 반환합니다. 30은 비현실적으로 큰 값 (라디안)입니다. – lbalazscs

+0

우우, 우연히 읽었습니다. 나는이 변형을 시도 할 것이다, 고마워. –