2016-11-05 22 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来跟踪绘制的形状。

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