Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 小程序绘制多个形状而不是一个_Java_Applet_Drawing - Fatal编程技术网

Java 小程序绘制多个形状而不是一个

Java 小程序绘制多个形状而不是一个,java,applet,drawing,Java,Applet,Drawing,我正在创建一个小程序,让用户使用橡皮筋效果绘制不同的形状,让用户在绘制形状时看到它。我想要的是程序绘制留在屏幕上的形状。问题是程序在鼠标所在的位置绘制形状 以下面的程序为例。假设用户在点50,50处单击小程序并拖动鼠标以绘制右下角为70,70的矩形。程序将在最终矩形内绘制多个矩形,即右下角位于54、56、63、61等的矩形。。我只想显示最后的矩形,但也同时使用橡皮筋效果。如果用户绘制第二个矩形,第一个矩形将保留在屏幕上,而用户绘制第二个矩形 我如何修改代码以使其工作 import java.aw

我正在创建一个小程序,让用户使用橡皮筋效果绘制不同的形状,让用户在绘制形状时看到它。我想要的是程序绘制留在屏幕上的形状。问题是程序在鼠标所在的位置绘制形状

以下面的程序为例。假设用户在点50,50处单击小程序并拖动鼠标以绘制右下角为70,70的矩形。程序将在最终矩形内绘制多个矩形,即右下角位于54、56、63、61等的矩形。。我只想显示最后的矩形,但也同时使用橡皮筋效果。如果用户绘制第二个矩形,第一个矩形将保留在屏幕上,而用户绘制第二个矩形

我如何修改代码以使其工作

import java.awt.Graphics;
import java.awt.event.*;

public class Test extends java.applet.Applet implements MouseListener, MouseMotionListener {
    int downX, downY, dragX, dragY;

    public void init() {
        downX = downY = dragX = dragY = 0;

        addMouseListener(this);
        addMouseMotionListener(this);
    }

    public void paint(Graphics g) {
        g.drawRect(downX,downY,dragX-downX,dragY-downY);
    }

    public void update(Graphics g) {
        paint(g);
    }

    public void mouseClicked(MouseEvent e) {
        downX = e.getX();
        downY = e.getY();
    }

    public void mouseDragged(MouseEvent e) {
        dragX = e.getX();
        dragY = e.getY();
        repaint();
    }

    public void /*Other MouseEvent methods*/ {}
}
你把油漆链弄断了。未能调用super.paint会阻止小程序准备图形上下文进行绘制,因为它会删除以前可能绘制过的任何内容。不需要覆盖更新,因为您没有对它做任何操作。 通常,您应该避免覆盖顶层容器的绘制,因为它们不是双缓冲的,并且在重新绘制时会闪烁 您应该避免使用Applet,而是使用jappleta(例如JPanel)的组合作为绘图表面。事实上,如果你只是在学习。最好使用JFrame,因为小程序有很多额外的管理 绘画的本质是破坏性的。您需要维护一个要绘制的内容列表。在这里,我推荐一个点列表,可以用来绘制线,其中最后一个点是当前拖动点
还可以查看有关绘画工作原理的详细信息

您必须保存上次绘制的内容,在其上绘制新内容,然后绘制整个内容。它的基本2d图形。你也必须对HTML5的画布做同样的事情。我正在用更新做一些事情——这是用户如何绘制其他矩形,而不会使以前的矩形消失。@Tnt现在我对Java有了更多的经验,我可以说你的提示对我帮助很大。我感谢你的帮助!