问题描述
- Java画板代码 请问这个flag变量具体是什么作用?
-
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;//直线 } } }
解决方案
public void mousePressed(MouseEvent event)//按下鼠标时:
{
flag=false;
point1=event.getPoint();//记录按下鼠标时的点坐标
sx=point1.x;
sy=point1.y ;
}
......
case 2:////画直线按钮被选中时:
** if(! flag){**
point2=event.getPoint();
x=point2.x; y=point2.y ;
g.drawLine(sx,sy,x,y);
flag=true;
}
else
......
从上面这两段代码中的“flag=false;”以及“if(! flag)...”,可以看出来是用来判断鼠标是否被按下。
解决方案二:
** 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);
}
解决方案三:
区别就是 多了这两行
g.setXORMode(Color.red);//设置异或画图模式
g.drawLine(sx,sy,x,y); //清除上次移动时画出的线
猜测可能是 :是否是鼠标按下划线, 还是设置画图模式 清除上次移动时画出的线然后划线
解决方案四:
为了判断现在的状态是在画还是普通的移动!
解决方案五:
为了判断现在的状态是在画还是普通的移动!属于设置标志位,用于判断作用
解决方案六:
属于设置标志位,用于判断作用
时间: 2024-10-24 03:37:53