import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DrawPanel extends JPanel
{
private JPanel right,left;//建立2个面板
private JRadioButton op2;
private int f=2;
private int sx, sy, x,y;
**private boolean flag=false;**//【这个flag】
private Color c;
private Point point1=null,point2=null;
public DrawPanel()//DrawPanel无参构造器
{ c =Color.black;
right = new JPanel();
left = new JPanel();
ButtonGroup g = new ButtonGroup();//new一个按钮组
op2 = new JRadioButton("直线",false);
g.add(op2);
left.setLayout(new BoxLayout(lef__t,BoxLayo_ut_.Y_AXI_S));
left.add(op2);
op2.addActionListener(new listen2());
right.setBackground(Color.white); //
right.addMouseListener(new listen1());
right.addMouseMotionListener(new listen1());
setLayout(new BorderLayout());//边界布局
add(right,"Center");
add(left,"West");
setBackground(Color.white);
setPreferredSize(new Dimension(500,450));
_
}
private class listen1 implements MouseListener,MouseMotionListener
{
public void mousePressed(MouseEvent event)//按下鼠标时:
{
**flag=false;**
point1=event.getPoint();//记录按下鼠标时的点坐标
sx=point1.x;
sy=point1.y ;
}
public void mouseReleased(MouseEvent event)//释放鼠标时:
{
Graphics g=right.getGraphics();//
switch(f){
case 2://画直线按钮被选中时:
point2=event.getPoint();//获取释放鼠标的坐标点
x=point2.x; y=point2.y ;
g.setColor(c);
g.drawLine(sx,sy,x,y);//画一条从单击点到释放点的直线
break;
}
}
public void mouseEntered(MouseEvent event){}
public void mouseExited(MouseEvent event){}
public void mouseClicked(MouseEvent event){ }
public void mouseMoved(MouseEvent event){}
public void mouseDragged(MouseEvent event)
//具体化MouseMotionListener中的拖拽方法,使在拖拽鼠标时产生预览效果
{
Graphics g=right.getGraphics();
switch(f){
case 2:////画直线按钮被选中时:
** if(! flag){**
point2=event.getPoint();
x=point2.x; y=point2.y ;
g.drawLine(sx,sy,x,y);
flag=true;
}
else
{
g.setXORMode(Color.red);//设置异或画图模式
g.drawLine(sx,sy,x,y); //清除上次移动时画出的线
point2=event.getPoint();
x=point2.x; y=point2.y ;
g.drawLine(sx,sy,x,y);
}
break;}
}
}
private class listen2 implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
Object source=event.getSource();//获得事件源
if(source==op2)f=2;//直线
}
}
}