在 paintComponent 中重绘形状时无法保存 Stroke/Line 厚度
Can't save Stroke/Line Thickness when redrawing Shapes in 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。
preDrawnShapes 是一个 Shapes ArrayList,preDrawnShapeThickiness 是一个 Float Arraylist。
我是不是漏掉了什么?
更新: 我发现 PreDrawnShapeThickness 仅存储零浮点数。我不确定为什么。
有两种常用的增量绘画方式:
保留要绘制的对象列表。然后 paintComponent() 方法遍历 List 并绘制每个对象。因此,在您的情况下,自定义对象将包含您要绘制的形状和形状厚度的 int 值。
只需将每个对象直接绘制到 BufferedImage。然后你可以只使用 JLabel 将 BufferedImage 显示为图标,或者自定义绘画来绘制 BufferedImage。
查看 Custom Painting Approaches 这两种方法的示例。
我一直在开发一个简单的绘图程序,最近 运行 在我的绘图组件中重新绘制形状时遇到了麻烦。
@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。
preDrawnShapes 是一个 Shapes ArrayList,preDrawnShapeThickiness 是一个 Float Arraylist。
我是不是漏掉了什么?
更新: 我发现 PreDrawnShapeThickness 仅存储零浮点数。我不确定为什么。
有两种常用的增量绘画方式:
保留要绘制的对象列表。然后 paintComponent() 方法遍历 List 并绘制每个对象。因此,在您的情况下,自定义对象将包含您要绘制的形状和形状厚度的 int 值。
只需将每个对象直接绘制到 BufferedImage。然后你可以只使用 JLabel 将 BufferedImage 显示为图标,或者自定义绘画来绘制 BufferedImage。
查看 Custom Painting Approaches 这两种方法的示例。