【发布时间】:2016-06-10 09:14:52
【问题描述】:
我正在尝试开发一个将几何图形绘制到图像上并保存它们的小型应用程序。我的面板类中有这段代码:
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
if (getBufferedImage() != null)
{
g.drawImage(getBufferedImage(), 120, 0, getBufferedImage().getWidth(), getBufferedImage().getHeight(), null);
}
for (Shape s : getShapes())
{
if (getBufferedImage() != null)
{
Graphics2D graphics = getBufferedImage().createGraphics();
s.draw(graphics);
}
}
}
getBufferedImage() 将返回加载图像的缓冲图像。而s.draw() 是我定义的各个形状类中的方法。
就像在 Rectangle 中一样,它有代码:graphics.drawRect()
线路:graphics.drawLine()
Line 类中的方法:
@Override
public void draw(Graphics g)
{
g.setColor(getColor());
g.drawLine(getXAxis(), getYAxis(), getWidth() + getXAxis(), getHeight() + getYAxis());
}
这些是我重写的 MouseAdapter 方法
@Override
public void mousePressed(MouseEvent event)
{
switch (getSelectedShape())
{
case Rectangle:
{
getShapes().add(new Rectangle(event.getX(), event.getY(), getSelectedColor(), isFilled()));
break;
}
case Line:
{
getShapes().add(new Line(event.getX(), event.getY(), getSelectedColor()));
break;
}
}
repaint();
}
@Override
public void mouseDragged(MouseEvent event)
{
if (event == null || event.getPoint() == null || getShapes().size() <= 0)
{
return;
}
Shape currentShape = getShapes().get(getShapes().size() - 1);
if (currentShape == null)
{
return;
}
currentShape.mouseDragged(event.getPoint());
repaint();
}
现在,当我绘制任何形状时,会改为绘制多个形状:
【问题讨论】:
-
你能告诉我们
s.draw(g);上有什么代码吗?我希望你在做一些基于 MouseListener、MouseMotionEvent 的计算。 -
为什么要在循环中画两次 s.draw(graphics);和 s.draw(g);
-
@shazin 我已经编辑了我的问题
-
@Beniton 我通过提供 Line 类的 draw() 方法编辑了问题
-
@SaikiranGosikonda 能否也包含 MouseListener 相关代码。以及如何计算坐标、高度和宽度?