2013-03-27 67 views
1

多个多边形结果继我以前的帖子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); 
} 
} 

,这段代码的结果:this

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

,我所做的改变是:当我们用一个多边形完成的,它的坐标保存在Polygon类的ArrayList中,每个我创建一个新的多边形的时候,我把 以前的多边形和绘制它们,同时绘制一个新的多边形。

正如你在上面看到的,绘图出了问题,我似乎无法找到 的问题。

我很感激任何帮助。

感谢

编辑:

考虑什么@StanislavL说后,我搬到者行mouseClicked(),但这次我每一个新的多边形,而不创建时间得到一个新的屏幕“旧”多边形。

只是一个新的多边形......不旧的

enter image description here

+1

您没有发布最重要的零件 - 绘图代码。顺便说一句:为什么你不能使用标准的Polygon类?您可以从这里获取http://java-sl.com/shapes.html中绘制常规多边形的源代码。 – StanislavL 2013-03-27 10:52:12

+0

@StanislavL:当然,我在第一个文件('PolygonnerJframe.java' )下,在private void draw(Graphics g,Point p1,Point p2)'的函数下。这是HW,因此我不能使用Polygon类:) – ron 2013-03-27 10:53:43

回答

2

在每个public void paintComponent(Graphics g)通话 您创建一个新的多边形添加将其添加到列表中的多边形。

 Polygon poly = new Polygon(this.edges); 

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

猜测应该只发生一个例如在mouseClicked()处理

+0

请在这里看到我的帖子, – mKorbel 2013-03-27 11:05:22

+0

@StanislavL:它仍然不起作用:我将这些行移入'mouseClicked()'重写的方法,但是这次屏幕除了NEW多边形外不显示任何内容。请参阅编辑过的帖子。 – ron 2013-03-27 13:05:23

+0

简单禁用,super.paintComponent(g);,(但请确保不是正确的方式),您是否阅读了@trashgod的评论 – mKorbel 2013-03-27 13:17:11

2

@Stas代码适用于我没有任何add_ons(在IDE中添加了基本的东西),你的意思最终结果可能是?

enter image description here

编辑

肮脏的黑客是禁用super.paintComponent方法(G);,但适当的方式应该只是

  • 的所有对象添加到阵列中(见@ trashgod很清楚评论)

  • 创建BurreferImage作为背景图像(在鼠标Double_Click后)

输出禁用超级。的paintComponent(克);

enter image description here

+0

不,我需要创建多个多边形,其中最后一个Point连接到第一个点。 – ron 2013-03-27 11:08:49

+0

是否有一些逻辑,对于一个多边形有多少点是有效的, – mKorbel 2013-03-27 11:11:37

+0

以三角形为例,它有3个点和3个边。因此,我取每个边(每个边有2个点,每个边有一个点)并绘制它与'drawline'。那就是我努力的方式,但正如你所看到的,我还有其他的东西。 – ron 2013-03-27 11:13:57