Java 绘画椭圆的一个程序问题

来源:百度知道 编辑:UC知道 时间:2024/09/23 20:27:45
import java.awt.event.*;
import java.awt.*;
public class app43 extends Frame implements MouseMotionListener,MouseListener
{ static app43 frm=new app43();
static int px1,py1,px2,py2,status=0;
int rpx1,rpx2,rpy1,rpy2;
public static void main(String args[])
{
frm.setTitle("鼠标拖动画椭圆");
frm.setSize(250,230);
frm.addMouseMotionListener(frm);
frm.addMouseListener(frm);
frm.setVisible(true);}
public void mouseMoved(MouseEvent e)
{px1=e.getX();//取下鼠标按下的X坐标
py1=e.getY();//取下鼠标按下的Y坐标
status=0;
}
public void mouseDragged(MouseEvent e)
{
Graphics g=getGraphics();
g.setColor(Color.yellow);
g.setXORMode(Color.black);//设置以异或模式作图
if(status==1) g.drawOval(px1,py1,px2,py2);
else
{px1=e.getX();
py1=e.getY();
status=1;
}
px2=Math.abs(e.getX()-px1);//计算长径
py2=Math.abs(e.

这个程序非常的差劲,画圆的颜色无法直接设置,一旦改变窗口大小图就会消失,画大一点就会卡,还只能往右下方画圆。画圆的逻辑也是非常的不常规。
这种画图一般都要用BufferedImage,不知你这个程序是不知道正确的方法还是显摆用诡异的方法很复杂的实现很简单的功能。

Graphics g=getGraphics();
g.setColor(Color.yellow);
g.setXORMode(Color.black);//把所有的黄色都画成黑色,同时把所有黑色画成黄色,把白色画成蓝色,把蓝色画成白色。(后面这个颜色组合是“不可预测”的)
if(status==1) g.drawOval(px1,py1,px2,py2); //如果正在拉动鼠标,把屏幕上的蓝色圆涂白,注意鼠标坐标用的是上次更新的
else
{px1=e.getX();
py1=e.getY();
status=1;
}
px2=Math.abs(e.getX()-px1);//用新的鼠标坐标计算长径
py2=Math.abs(e.getY()-py1);//用新的鼠标坐标计算宽径
g.drawOval(px1,py1,px2,py2);//在新的鼠标坐标画椭圆(把白色变成蓝色)
rpx1=px1;rpy1=py1;rpx2=px2;rpy2=py2;//保存坐标位置,好待会儿再把这个蓝圆涂白