2011-06-04 60 views
1

我必須在java中繪製精確的拱形。我使用Graphics2D.fillArc()的currenlty。問題是它只接受整數,而且曲線不準確,我不能使弧度順利增加。有沒有人知道這個解決方法?圖形拱不準確

+0

我認爲最好的幫助,我們應該看到什麼不適合你,最好的方式是如果你可以創建併發佈一個編輯你的問題的小型可編譯和可運行的程序我們可以測試和修改,直接爲我們顯示你的問題,[SSCCE](http://sscce.org)。祝你好運! – 2011-06-04 13:07:12

+0

另外,你有沒有看過Arc2D.Double類的弧線? – 2011-06-04 13:09:56

+0

是的,我只是在那2分鐘前實施它。不過謝謝。把答案放在答案中,並把它當作別人的正確答案。 – 2011-06-04 13:12:45

回答

3

這是我的SSCCE使用Arc2D。

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

@SuppressWarnings("serial") 
public class ChangingArcs extends JPanel { 
    private static final Color ARC_FILL_COLOR = Color.RED; 
    private static final int TIMER_DELAY = 20; 
    private static final int ARC_X = 100; 
    private static final int ARC_Y = 100; 
    private static final int ARC_W = 500; 
    private static final int ARC_H = 500; 
    protected static final double DELTA_EXTEND = 0.5; 
    private Arc2D arc; 
    private double extend = 0; 

    public ChangingArcs() { 
     new Timer(TIMER_DELAY, new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      extend += DELTA_EXTEND; 
      extend %= 360; 
      double start = -extend/2; 
      arc = new Arc2D.Double(ARC_X, ARC_Y, ARC_W, ARC_H, start, extend, Arc2D.PIE); 
      repaint(); 
     } 
     }).start(); 
    } 

    public Dimension getPreferredSize() { 
     return new Dimension(ARC_W + 2 * ARC_X, ARC_H + 2 * ARC_Y); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2 = (Graphics2D)g; 
     if (arc != null) { 
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     g2.setColor(ARC_FILL_COLOR); 
     g2.fill(arc); 
     } 
    } 

    private static void createAndShowUI() { 
     JFrame frame = new JFrame("ChangingArcs"); 
     frame.getContentPane().add(new ChangingArcs()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowUI(); 
     } 
     }); 
    } 
} 
+0

你肯定有很多時間在你的手上lol – 2011-06-04 13:36:50

+0

@stas:我以前沒有使用過Arc2D,所以做這個學習練習。 – 2011-06-04 13:45:03

+0

@HFOE:很好的例子。如果顏色是黃色的,它會看起來像一個PacMan。 ;) – 2011-06-04 13:52:40