2011-10-18 138 views
1

我發現這個繪製具有不同顏色圓圈的類。每個圓的顏色都是根據特定的顏色順序來確定的,這些順序隨着顏色到達最後而重複(使用所有顏色一次)。我想修改這個方法,使我可以單獨確定每個圓圈的顏色(在g.setColor上)。換句話說,我希望能夠將顏色部署爲參數,並從另一個類中的另一個方法調用該方法。使用特定顏色繪製JPanel

public class DrawingPane extends JPanel { 

    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 

     Rectangle rect; 
     for (int i = 0; i < circles.size(); i++) { 
      rect = circles.elementAt(i); 
      g.setColor(colors[(i % color_n)]); 
      g.fillOval(rect.x, rect.y, rect.width, rect.height); 
     } 
    } 
} 

如果你發現我的問題愚蠢的,我想,讓你知道,我擔心的是,該方法是從JPanel的繼承和我不知道如何有效地覆蓋它的事實。

+0

看到我的回答http://stackoverflow.com/questions/7809838/jpanel-drawing-with-a-specific-color/7810287#7810287 – gtiwari333

回答

3

DrawingPane似乎有Rectangle命名circles(原文如此)的列表。我不知道Rectangle是您的課程之一還是標準java.awt.Rectangle

如果它是您的課程之一,那麼只需在該課程中添加color屬性,並在迭代過程中從中獲取該屬性。

如果它是標準java.awt.Rectangle,然後引入Circle類,其中包含一個矩形和顏色,並使用Circle列表,而不是Rectangle列表。

+0

這是標準ava.awt.Rectangle – arjacsoh

2

我不確定你的意思,但是如果你試圖從外部類設置圓的顏色,那麼使用setter和(如果需要的話)一個吸氣器將該數組作爲類的屬性:

public class DrawingPane extends JPanel { 
    private Color[] colors; 

    public void setCircles(Color[] colors) { 
     this.colors = colors; 
     repaint(); 
    } 

    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 

     Rectangle rect; 
     if (colors != null) { 
      for (int i = 0; i < colors.size(); i++) { 
       rect = circles.elementAt(i); 
       g.setColor(colors[(i % color_n)]); 
       g.fillOval(rect.x, rect.y, rect.width, rect.height); 
      } 
     } 
    } 
} 
+0

你的顏色陣列有時被稱爲色彩,有時界。圓也是列表或矩形。 –

+0

@JBNizet:謝謝!固定,我認爲,雖然我原來的帖子有些困惑。 –

2

我希望能夠將色彩部署作爲參數,並在另一個類

然後,你需要存儲的顏色和形狀作爲自定義類的屬性從另一個方法調用的方法。

Custom Painting Approaches顯示了一個如何做到這一點的例子。我將使用DrawOnComponent作爲起點。你的代碼會更簡單,因爲你不需要處理拖動。所有你需要做的就是創建一個addCircle(...)方法,它將圓的大小/位置/顏色作爲參數。

2

你是在找這個嗎?

您可以在單獨的.Java文件中自由聲明類MyCircleDrawingPane

我相信這會回答「我希望能夠將顏色部署爲參數並從另一個類的另一個方法調用該方法。」

public class TestingX12 { 
    public static void main(String args[]) { 
     new TestingX12(); 
    } 

    public TestingX12() { 
     //create list of circles 
     List<MyCircle> circList = new ArrayList<MyCircle>(); 
     circList.add(new MyCircle(new Rectangle(100, 20, 120, 30), Color.red)); 
     circList.add(new MyCircle(new Rectangle(150, 50, 80, 50), Color.yellow)); 
     circList.add(new MyCircle(new Rectangle(30, 90, 30, 110), Color.blue)); 

     DrawingPane dp = new DrawingPane(circList); 
     JFrame frame = new JFrame("JToolTip Sample"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setContentPane(dp); 
     frame.setSize(400, 450); 
     frame.setVisible(true); 
    } 

    class MyCircle { 
     Rectangle rectangle; 
     Color color; 
     public MyCircle(Rectangle r, Color c) { 
      this.rectangle = r; 
      this.color = c; 
     } 
    } 
    public class DrawingPane extends JPanel { 
     List<MyCircle> circles; 
     public DrawingPane(List<MyCircle> circles) { 
      this.circles = circles; 
     } 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Rectangle rect; 
      for (int i = 0; i < circles.size(); i++) { 
       rect = circles.get(i).rectangle; 
       g.setColor(circles.get(i).color); 
       g.fillOval(rect.x, rect.y, rect.width, rect.height); 
       System.out.println("Drawing..."); 
      } 
     } 
    } 
} 
+0

這是我所問的基礎上的好。謝謝。 – arjacsoh