java - 不同形状的不同笔划?的Graphics2D

时间:2016-11-05 03:42:13

标签: java swing arraylist java-2d

我正在为一个项目制作一个绘图应用程序并遇到问题。

我的模型存储两个圆形和方形对象的ArrayLists。 (每次绘制一个,都会存储)

我的GUI上还有一个JSlider,可以使用g2d.setStroke(new BasicStroke(sliderValue))来改变笔划的粗细;

现在,问题在于,当更改厚度并绘制新形状时,画布上任何现有形状的厚度也会发生变化。

如何将笔划粗细个性化为一个形状,并确保它在绘制后不会发生变化?

抱歉,如果它有点模糊。我想不要在网上发布代码,因为它是一项任务。

谢谢!

2 个答案:

答案 0 :(得分:1)

  

我的模型存储两个圆形和方形对象的数组列表。

您不需要两个ArrayLists。

你只需要一个,然后你可以存储一个Shape对象,它是一个圆形,正方形或任何其他形状。

查看Playing With Shapes以获取有关此概念的更多一般信息,包括对基本绘画代码的建议。

  

当厚度改变并且绘制新形状时,画布上任何现有形状的厚度也会改变。

这意味着每次重新绘制组件时都要重新绘制ArrayLists中的Shapes。

因此,在ArrayList中,您需要存储一个包含两条信息的Custom对象:1)要绘制的Shape和2)用于绘制Shape的Stroke。然后,当您遍历ArrayList时,为每个绘制的Shape重置Stroke。

查看Custom Painting Approaches中的Draw On Component示例,了解此方法的示例。

Draw On Image方法显示如何绘制到BufferedImage,因此您甚至不需要ArrayLists来跟踪绘制的形状。

您使用的方法取决于您的确切要求。

答案 1 :(得分:0)

  

如何将笔划粗细个性化为一个形状,并确保它在绘制后不会改变?

您可以在更改之前存储旧笔划,在绘制最新项目之前更改图形对象的笔划,然后将笔划恢复为原始笔划。

或者您可以创建Graphics对象的副本,更改其Stroke,并使用它绘制新项目,在完成后将其处理掉。

或者您可以绘制旧项目,其中Stroke不应更改为由同一Graphics对象显示的BufferedImage。

  

对不起,如果它有点模糊。我想不要在网上发布代码,因为这是一项任务。

没问题 - 但是如果你想要更具体的代码帮助,你需要显示相关的代码,最好是你的Minimal, Complete, and Verifiable Example Program(请查看链接)。