2009-12-02 42 views
1

我有一個JPanel爲其設置了一些圖像作爲背景。我需要在圖像上繪製一堆圓圈。現在圓將根據某個座標x,y定位,並且大小將基於某個整數大小。這就是我的班級。如何在JPanel上畫圓? Java 2D

import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Image; 
import javax.swing.JPanel; 

class ImagePanel extends JPanel { 

    private Image img; 
    CircleList cList; //added this 

    public ImagePanel(Image img) { 
     this.img = img; 
     Dimension size = new Dimension(img.getWidth(null), img.getHeight(null)); 
     setPreferredSize(size); 
     setMinimumSize(size); 
     setMaximumSize(size); 
     setSize(size); 
     setLayout(null); 

     cList = new CircleList(); //added this 
    } 

    public void paintComponent(Graphics g) { 
     g.drawImage(img, 0, 0, null); 

     cList.draw(null); //added this 
    } 
} 

如何創建一些可以執行此操作的方法?

+0

我剛剛看到Ellipse2D需要double或float,我想我可以使用double來表示大小。 – user69514 2009-12-02 22:52:09

回答

2

你的方法可能與此類似,在您使用類CircleList舉行各界和繪圖程序太:

class CircleList 
{ 
    static class Circle 
    { 
    public float x, y, diameter; 
    } 

    ArrayList<Circle> circles; 

    public CirclesList() 
    { 
    circles = new ArrayList<Circle>(); 
    } 

    public void draw(Graphics2D g) // draw must be called by paintComponent of the panel 
    { 
    for (Circle c : circles) 
     g.fillOval(c.x, c.y, c.diameter, c.diameter) 
    } 
} 
+0

好吧,所以我創建了CircleList鏈表中的兩個任意圓。當我在ImagePanel類中調用circleList.draw(null)時,什麼都不會發生。 GUI實際上凍結了。我稱之爲draw方法的參數是什麼? – user69514 2009-12-02 23:52:09

+0

我在原始文章中指出了我添加的東西 – user69514 2009-12-02 23:54:25

+0

好吧,我只是將g轉換爲Graphics2D。謝謝 – user69514 2009-12-03 00:14:39

1

最簡單的事情就是沿着這些線放置東西到你的paintComponent方法。

int x = ...; 
int y = ...; 
int radius = ...; 
g.drawOval(x, y, radius, radius); 
+0

-1使用getGraphics()將不起作用。是的,它會畫一次橢圓形,但只要JAVA確定面板需要重新繪製,它就會被移除。自定義繪畫是通過覆蓋paintComponent()方法完成的。 – camickr 2009-12-02 23:03:10

+0

你在開玩笑嗎?然後,離開'getGraphics()'並將代碼移動到'paintComponent'方法中。 – jitter 2009-12-02 23:49:40

+0

@camickr。 thx給你,雖然我基本上給出了與傑克相同的答案我在-1 – jitter 2009-12-03 02:01:06

1

那麼,你可能會想創建一個ArrayList來存儲關於要繪製的圓的信息。然後,在調用paintComponent()方法時,您只需遍歷ArrayList並繪製圓。

Custom Painting Approaches顯示了這可能是如何做一個矩形。您可以修改橢圓的代碼,也可以添加方法來使用位置信息更新數組,而不是動態地執行此操作。

1

你看着JXLayer?這是一個非常棒的庫,它允許您以一種明顯的方式在任何GUI元素上繪製特殊的繪畫。我相信這將包括在JDK7的主要java庫中