2013-04-03 64 views
2

我想我只是從給我這個問題的代碼開始。爲什麼Java Ellipse2D繪製得很小時,會變成矩形?

class AnimationPanel extends JPanel 
{ 
    OfficeLoad load; 
    Timer timer = new Timer(); 

    private static final long serialVersionUID = 1L; 
    public AnimationPanel() 
    { 
     setBackground(new Color(240, 240, 240)); 
     setBorder(null); 
     setOpaque(false); 
     setBounds(10, 143, 400, 21); 
    } 

    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     load = new OfficeLoad(g); 
    } 
    ... 
    } 

... 

final Color WHITE = Color.WHITE; 
public OfficeLoad(Graphics g) 
{ 
    Graphics2D g2 = (Graphics2D)g.create(); 

    g2.setPaint(WHITE); 
    g2.fill(new Ellipse2D.Double(30, 1, 5, 5)); 
    g.fillOval(40, 1, 5, 5); 
    g.fillOval(50, 1, 5, 5); 
    g.fillOval(60, 1, 5, 5); 
    g.fillOval(70, 1, 5, 5); 
    g.setColor(new Color(0, 102, 51)); 
    g.fillRect(0, 0, 10, 21); 
} 

兩個當我使用g.fillOval(),當我使用g2.fill(new Ellipse2D())原來的正方形。只是爲了獲得一些額外的信息,我只是爲了好玩,當它啓動時試圖複製excel 2013啓動畫面。這部分用於加載「Excel」下面的點。我已經用gif做了這個,這很容易,但是我的朋友挑戰我使用油漆,重漆等等。但我真的不能這樣做,除非他們成爲圓而不是正方形......任何幫助將不勝感激。 :)

+3

是否啓用與'g2.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING,java.awt.RenderingHints.VALUE_ANTIALIAS_ON)反鋸齒工作;'? – halex

回答

2

謝謝Halex! :D對於沒有看到他評論的每個人,Halex都給出了以下答案。

是否啓用與g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

它沒有反鋸齒工作。謝謝! :d

+0

歡迎您:) – halex

+0

對於更好的圓圈和其他省略號,您可能還想'g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,RenderingHints.VALUE_STROKE_PURE)',參見http://stackoverflow.com/a/31221395/1143274 –

1

所有我建議首先不要讓你畫你可以儲存officeload對象或進行靜態無效在OfficeLoad所以你不需要對象在所有新OfficeLoad對象每次。

你也將需要antialiassing

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
+0

沒有製造新的物體。在開始新的對象只是將它設置,再有就是,我離開了那是OfficeLoad的部分稱爲paintLoad是重繪對象的另一種方法。雖然定時器將在AnimationPanel中處理。 –

+1

你讓一個新的OfficeLoad對象每次的paintComponent被稱爲一次遇到這種情況不僅如果你調用一個重繪,而且如果比如你的JFrame被移動或邊界的改變。如果你只想在初始化時將paintComponent的行移動到構造函數中。 –

+0

好點。感謝那。 :) –