2013-12-11 38 views
0

我在Java中創建了一個簡單的Java程序,用於繪製圖形基元(線條,矩形,橢圓等),這些形狀通過拖動鼠標並存儲到屏幕上一個Shapes數組,所以我添加了一個滑塊來動態獲取筆畫大小(從1到20,1是默認值),但它更新了先前繪製的所有形狀。動態更新Java中形狀數組的筆畫大小

//注1:Graphics2D圖;在延長的JFrame

類定義

//注2:strokeSize值是動態與滑塊

public void paint(Graphics g) 
      { 

        graph = (Graphics2D)g; 

        graph.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
          RenderingHints.VALUE_ANTIALIAS_ON); 

        graph.setStroke(new BasicStroke(strokeSize)); 

for (Shape currentShape : shapes) 
        { 
         graph.setPaint(strokeCounter.next()); 

         graph.draw(currentShape); 

         graph.setPaint(fillCounter.next()); 

         graph.fill(currentShape); 
        } 


//What follows are If statements for choosing a shape 

//and actual methods for drawing them... 

改變我的問題是:如何更新strokeSize,但僅限於形狀目前正在擬定?

+0

'strokeSize'的定義在哪裏? –

+0

在構造函數之前擴展JFrame的類。 – user3086760

回答

0

將筆畫大小和形狀一起存儲。在發出繪圖命令之前設置筆畫大小。

+0

你的意思是把: graph.setStroke(new BasicStroke(strokeSize)); above graph.draw(currentShape); ? 我已經嘗試過,但它仍然更新已繪製形狀的strokeSize。 – user3086760

+0

那麼你必須把它放在錯誤的地方。確保它在循環內部但在繪製之前。 –

+0

那麼, 是的,它是在循環內,但仍然不能按預期工作。 – user3086760

0

添加graph.setStroke(new BasicStroke(currentShape.getStrokeSize()));graph.draw(currentShape);

你需要一個叫做StrokeSize屬性添加到您的Shape類。

+0

形狀不是一個類。我有一組形狀:ArrayList shapes = new ArrayList (); – user3086760

+0

@ user3086760如果不是類,那麼您將無法將其與'ArrayList'一起使用。我認爲你需要定義一個新的類,它將包含你的「形狀」和它的筆畫大小。 –