1

在我之前的帖子之后我将代码更改为:

PolygonnerJframe.java

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JFrame;
import javax.swing.JPanel;


/**
 * 
 * @author X2
 *
 */
public class PolygonnerJframe
{
    public static void main (String[] args)
    {
     JFrame frame = new JFrame("Draw polygons");
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     frame.setContentPane(new DrawingPanel());
     frame.pack();
     frame.setVisible(true);
 }
}

现在,此代码导致:这个

我不明白是什么原因造成的。

我所做的更改是:当我们完成一个多边形时,它的坐标保存在 class 的 arrayList 中Polygon,每次我创建一个新的多边形时,我都会获取以前的多边形并绘制它们,同时绘制一个新多边形。

正如您在上面看到的,绘图出了点问题,我似乎找不到问题所在。

我会很感激任何帮助。

谢谢

编辑:

在考虑了@StanislavL 所说的之后,我将这些线移到了mouseClicked(),但是这次每次创建一个没有“旧”多边形的新多边形时,我都会得到一个新屏幕。

只是一个新的多边形......没有旧的

在此处输入图像描述

4

2 回答 2

2

@Stas 代码在没有任何附加组件的情况下对我有用(在 IDE 中添加了基本的东西),你的意思是最终结果可能是 ???

在此处输入图像描述

.

编辑

.

肮脏的黑客是禁用 super.paintComponent(g);,但正确的方法应该只是

  • 将所有对象添加到数组中(请参阅@trashgod 的非常清晰的评论)

  • 创建一个 BurreferImage 作为背景图像(鼠标双击后)

通过禁用 super.paintComponent(g) 输出;

在此处输入图像描述

于 2013-03-27T11:04:35.047 回答
2

在每次public void paintComponent(Graphics g)调用时,您都会创建一个新的多边形并将其添加到多边形列表中。

        Polygon poly = new Polygon(this.edges);

        // add the polygon to the polygons array 
        this.polygons.add(poly);

猜猜应该只发生一次,例如在mouseClicked()处理中

于 2013-03-27T11:02:47.780 回答