【问题标题】:Trying to draw multiple polygons results in error尝试绘制多个多边形会导致错误
【发布时间】:2013-03-27 10:47:58
【问题描述】:

在我之前的帖子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(),但是这次每次创建一个没有“旧”多边形的新多边形时,我都会得到一个新屏幕。

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

【问题讨论】:

  • 您没有发布最重要的部分 - 绘图代码。顺便说一句:你为​​什么不能使用标准的 Polygon 类?您可以从这里获取源代码java-sl.com/shapes.html,其中绘制了常规多边形。
  • @StanislavL:我当然做了,在第一个文件 (PolygonnerJframe.java) 的函数 private void draw(Graphics g, Point p1, Point p2) 下。这是 HW ,因此我不能使用 Polygon 类:)

标签: java swing jframe awt


【解决方案1】:

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

        Polygon poly = new Polygon(this.edges);

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

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

【讨论】:

  • @StanislavL:它仍然不起作用:我将这些行移到 mouseClicked() overridden method 中,但是这次屏幕除了 NEW 多边形之外什么都不显示。请查看编辑后的帖子。
  • 简单禁用,super.paintComponent(g);,(但请确保这不是正确的方式),您是否阅读了@trashgod 的评论
【解决方案2】:

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

.

编辑

.

dirty hack 是禁用 super.paintComponent(g);,但正确的方法应该只是

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

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

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

【讨论】:

  • 不,我需要创建多个多边形,其中最后一个点附加到第一个点。
  • 有没有什么逻辑,一个多边形有多少点有效,
  • 以一个三角形为例,它有 3 个点和 3 个边。所以我取每条边(它有 2 个点,每端一个)并用 drawline 绘制它。这就是我尝试使用的方式,但正如你所看到的,我得到了其他东西。
  • +1 在GraphPanel 中,每个节点可以是PolygonList<Node> 可以是可编辑Polygon 的顶点。
  • @trashgod:这很好,但它仍然无法解释我的代码哪里出错了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 2014-01-14
  • 2013-02-16
  • 2011-12-30
  • 1970-01-01
相关资源
最近更新 更多