我正在创建一个applet,让用户可以使用橡皮筋效果绘制不同的形状,让用户在绘制时看到形状。我想要的是程序绘制留在屏幕上的形状。问题是程序在鼠标所在的任何地方都会绘制一个形状。
以下面的程序为例。假设用户在点(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*/ {}
}
答案 0 :(得分:0)
super.paint
会阻止小程序准备Graphics
上下文以进行绘制,方法是删除之前可能已绘制的任何内容。我们无需覆盖update
,因为您没有对其进行任何操作。paint
顶级容器,因为它们不会被双重缓冲,并且会在重新绘制时闪烁Applet
,而应使用JApplet
a(例如)JPanel
的组合作为绘图表面。事实上,如果你只是在学习。最好使用JFrame
,因为applet有很多额外的管理List
Point
个{{1}},可用于绘制线条,最后一个点是当前拖动点另请参阅Painting in AWT and Swing了解有关绘画如何运作的详细信息