天天看点

java 么清除已画的图形_[求助]怎么样消除之前画过的轨迹

[CODE]import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class J_DrawDemo extends JFrame implements ActionListener

{

panel pl=new panel();//生成panel的一个对象

JPanel jpb=new JPanel();//生成jpb容器,用于放置按钮

JRadioButton jb1;

JRadioButton jb2;

JRadioButton jb3;

JRadioButton jb4;

public J_DrawDemo()

{

super("画图程序");

jb1=new JRadioButton(" 画直线 ",true);//生成各个按钮对象

jb2=new JRadioButton(" 画椭圆 ");

jb3=new JRadioButton(" 画矩形 ");

jb4=new JRadioButton(" 自由绘图 ");

pl.shape=0;//默认是画直线

ButtonGroup bg=new ButtonGroup();

bg.add(jb1);

bg.add(jb2);

bg.add(jb3);

bg.add(jb4);

jb1.addActionListener(this);//注册按钮监听器

jb2.addActionListener(this);

jb3.addActionListener(this);

jb4.addActionListener(this);

jpb.setBorder(BorderFactory.createEtchedBorder());//设置jpb边界

pl.setBorder(BorderFactory.createEtchedBorder());//设置pl边界

jpb.add(jb1);//在按钮加入jpb

jpb.add(jb2);

jpb.add(jb3);

jpb.add(jb4);

ButtonGroup buttonGroup=new ButtonGroup();//定义一个按钮组,实现按钮互斥

Container cp=getContentPane();//获得容器

cp.add(jpb,BorderLayout.SOUTH);//将工具条加入容器

cp.add(pl,BorderLayout.CENTER);//将pl加入容器

cp.setBackground(Color.white);

setSize(600,500);

this.setResizable(false);//设置窗体大小不可变

setLocation(200,100);//设置窗体在屏幕的显示位置

setVisible(true);//设置窗体可见

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出方式

}

public void actionPerformed(ActionEvent e)//按钮实现动作并执行

{

if(e.getSource()==jb1)

pl.shape=0;

if(e.getSource()==jb2)

pl.shape=1;

if(e.getSource()==jb3)

pl.shape=2;

if(e.getSource()==jb4)

pl.shape=3;

}

public static void main(String[] args)

{

new J_DrawDemo();//调用J_DrawDemo类构造函数

}

}

class panel extends JPanel //定义一个JPanel的字类

{

int shape=-1;

int startX=0,startY=0;

int endX=0,endY=0;

int flag=0;

public panel()

{

//setBackground(Color.white);

addMouseListener(new MouseAdapter()

{

public void mousePressed(MouseEvent e)//鼠标按下事件

{

if(shape==3)//当为自由画线时,执行下面语句

{

endX=e.getX();

endY=e.getY();

}

else

{

startX=e.getX();

startY=e.getY();

}

}

}

);//注册鼠标动作监听器

addMouseMotionListener(new MouseMotionAdapter()

{

public void mouseDragged(MouseEvent e)//鼠标拖拽事件

{

if(shape==3)//当为画自由线时拖动鼠标动作才执行

{

startX=endX;

startY=endY;

endX=e.getX();

endY=e.getY();

repaint();

}

else//当选择画图功能不是自由画线时,则执行下面语句

{

endX=e.getX();

endY=e.getY();

repaint();

}

}

}

);

}

public void paintComponent(Graphics g)//实现画图

{

switch(shape)

{

case 0:

super.paintComponent(g);

g.drawLine(startX,startY,endX,endY);//画直线

break;

case 1:

super.paintComponent(g);

int width=endX-startX;

int height=endY-startY;

g.drawOval(startX,startY,width,height);//画椭圆

break;

case 2:

super.paintComponent(g);

width=endX-startX;

height=endY-startY;

g.drawRect(startX,startY,width,height);//画矩形

break;

case 3:

g.drawLine(startX,startY,endX,endY);//自由画线

break;

}

}

}[/CODE]

帮你改了一点点,你看看吧,像这种选择项最好不是用普通按钮来做

用单选按钮来做

否则别人不知道按了哪个

java 么清除已画的图形_[求助]怎么样消除之前画过的轨迹

可惜不是你,陪我到最后