2016-11-05 53 views
-4

我正在爲一個項目製作繪畫應用程序並遇到問題。java - 不同形狀的不同筆畫? Graphics2d

我的模型存儲兩個圓形和方形對象的ArrayList。 (每一次繪製,它被存儲)

我也有一個JSlider在我的GUI改變中風的厚度使用g2d.setStroke(new BasicStroke(sliderValue));

現在,問題是,當厚度發生變化,並且繪製了新的形狀時,畫布上任何現有形狀的厚度也會發生變化。

如何將筆畫厚度個性化爲形狀並確保它在繪製後不會改變?

對不起,如果它是模糊的。我想避免在網上發佈代碼,因爲這是一項任務。

謝謝!

回答

0

如何將筆觸粗細個性化爲形狀並確保其在繪製後不會改變?

您可以在更改之前存儲舊筆畫,在繪製最新項目之前更改Graphics對象的筆畫,然後將筆畫恢復爲原始筆畫。或者你可以創建一個Graphics對象的副本,改變它的Stroke,並用它畫出新的項目,在完成它之後進行處理。

或者您可以繪製舊筆記,那些筆畫不會更改爲由同一個Graphics對象顯示的BufferedImage的筆記。

對不起,如果它是含糊不清的。我想避免在網上發佈代碼,因爲這是一項任務。

沒問題 - 但是如果你想要更具體的代碼幫助,你需要顯示相關的代碼,最好是你的Minimal, Complete, and Verifiable Example Program(請檢查鏈接)。

1

我的模型存儲兩個圓形和方形對象的ArrayList。

您不需要兩個ArrayList。

你只需要一個,那麼你可以存儲一個Shape對象,它是一個圓形,方形或任何其他形狀。

查看Playing With Shapes以獲取有關此概念的更多一般信息,包括對基本繪畫代碼的建議。

當厚度發生變化並繪製新形狀時,畫布上任何現有形狀的厚度也會發生變化。

這意味着每次重新繪製組件時都要從ArrayList重新繪製形狀。

因此,在您的ArrayList中,您需要存儲具有兩條信息的自定義對象:1)要繪製的形狀和2)用於繪製形狀的描邊。然後,在迭代ArrayList時,爲每個繪製的形狀重置描邊。

查看來自Custom Painting ApproachesDraw On Component示例,查看該方法的示例。

Draw On Image方法顯示如何繪製到一個BufferedImage,所以你甚至不需要ArrayLists來跟蹤繪製的形狀。

您使用的方法取決於您的確切要求。