按照我之前的帖子here,我将代码更改为:
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);
}
}
现在,此代码会生成:
我无法理解是什么导致这种情况。
我所做的改变是:当我们完成一个多边形时,它的坐标保存在类Polygon
的arrayList中,每次我创建一个新的多边形时,我都会
绘制新多边形时,先前的多边形并绘制它们。
正如您在上面所看到的,绘图出了问题,我似乎无法找到 问题。
我很感激任何帮助。
由于
编辑:
在考虑了@StanislavL所说的内容之后,我将这些行移到了mouseClicked()
,但这次我每次创建一个没有“旧”多边形的新多边形时都会得到一个新的屏幕。
只是一个新的多边形......没有旧多边形
答案 0 :(得分:2)
每次public void paintComponent(Graphics g)
来电
您创建一个新的多边形添加将其添加到多边形列表。
Polygon poly = new Polygon(this.edges);
// add the polygon to the polygons array
this.polygons.add(poly);
猜猜应该只发生一次,例如在mouseClicked()
处理
答案 1 :(得分:2)
修改
脏黑客是禁用super.paintComponent(g);,但正确的方法应该只是
将所有对象添加到数组中(请参阅@ trashgod的非常清晰的注释)
创建一个BurreferImage作为Backgroung图像(在鼠标Double_Click之后)
通过禁用super.paintComponent(g);
输出