2015-11-20 52 views
0

我一直在研究一個簡單的描畫程序,並且最近在繪製組件時重繪圖形時遇到了一個問題。在paintComponent中重繪形狀時無法保存描邊/線條粗細

@Override 
    public void paintComponent(final Graphics theGraphics) { 
     super.paintComponent(theGraphics);  
     final Graphics2D g2d = (Graphics2D) theGraphics; 



    if (!preDrawnShapes.isEmpty() && !preDrawnShapeThickness.isEmpty()) { 
     for (int i = 0; i < preDrawnShapes.size(); i++) { 
      g2d.setStroke(new BasicStroke(preDrawnShapeThickness.get(i))); 

      g2d.draw(preDrawnShapes.get(i)); 

     } 
    } 

    g2d.setStroke(new BasicStroke(currentThickness)); 


    if (myShape != null) { 

     g2d.draw(myShape); 
     preDrawnShapeThickness.add(currentThickness); 

    } 


} 

此paintComponenent應該先重繪之前繪製的形狀,然後繪製從用戶輸入創建的新形狀。

出於某種原因,繪製新的形狀時,形狀厚度被設定爲當前厚度但我畫過的1

enter image description here

preDrawnShapes默認厚度之前的任何形狀是一個形狀的ArrayList preDrawnShapeThickiness是一個Float Arraylist。

我在這裏錯過了什麼嗎?

更新:我發現PreDrawnShapeThickness只存儲零的Floats。我不確定爲什麼。

回答

1

有兩種常見的方式做增量畫:

  1. 記住,你要畫對象的名單。然後,paintComponent()方法迭代List並繪製每個對象。所以在你的情況下,自定義對象將包含你想要繪製的Shape和形狀的厚度的int值。

  2. 只需將每個對象直接繪製到BufferedImage即可。然後,您可以使用JLabel將BufferedImage顯示爲圖標,或者執行自定義繪畫來繪製BufferedImage。

查看Custom Painting Approaches兩種方法的示例。

+0

謝謝你的幫助,我做了一個小修復,它的工作原理。 –