gui-Java画板代码 请问这个flag变量具体是什么作用?

问题描述

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

gui-Java画板代码 请问这个flag变量具体是什么作用?的相关文章

java i o流 文本框-JAVA中初始化问题,代码在中的变量不能被初始化

问题描述 JAVA中初始化问题,代码在中的变量不能被初始化 我创建了一个按钮,给按钮一个鼠标监听器.按下按钮会获得一个文本区的字符串给masage,当我在其他包中调用getMasage方法,得到的字符串是123而不是文本区的字符串. import java.awt.Color;import java.awt.event.MouseEvent; import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JT

extjs java-请问使用extjs进行文件上传,extjs前台代码和java后台代码应该怎么写

问题描述 请问使用extjs进行文件上传,extjs前台代码和java后台代码应该怎么写 请问使用extjs进行文件上传,extjs前台代码和java后台代码应该怎么写 解决方案 代码复制一下.http://www.cnblogs.com/hannover/archive/2010/12/02/1894820.htmlhttp://blog.itpub.net/29870867/viewspace-1280697/ 解决方案二: extjs的上传是封装好的,你只需要在后台servlet中接收传过

Java中的两个特殊变量this和super

变量 Java中的两个特殊变量this和super2001-04-26· ·Wayne ··yesky 在Java中有两个非常特殊的变量:this和super,这两个变量在使用前都是不需要声明的.this变量使用在一个成员函数的内部,指向当前对象,当前对象指的是调用当前正在执行方法的那个对象.super变量是直接指向超类的构造函数,用来引用超类中的变量和方法.因此它们都是非常有用的变量,下面我想介绍一下this和super的使用方法. 1.this 让我们先看一段代码吧: class Perso

Java获取代码中方法参数名信息的方法_java

前言 大家都知道随着java8的使用,在相应的方法签名中增加了新的对象Parameter,用于表示特定的参数信息,通过它的getName可以获取相应的参数名.即像在代码中编写的,如命名为username,那么在前台进行传参时,即不需要再编写如@Parameter("username")类的注解,而直接就能进行按名映射. 如下的代码参考所示: public class T { private interface T2 { void method(String username, Stri

java.lang.NoClassDefFoundError 不是环境变量

问题描述 java.lang.NoClassDefFoundError 不是环境变量 原码import java.awt.*;import java.awt.event.*; public class TankClient extends Frame { int x = 50 y = 50; @Override public void paint(Graphics g) { Color c = g.getColor(); g.setColor(Color.RED); g.fillOval(50

入门-JAVA 简短代码报错,就是发现不了问题

问题描述 JAVA 简短代码报错,就是发现不了问题 class StaticDemo { public static void main(String[] args) { Person.show(); } } class Person { String name;//成员变量 static String country = "CN"; public static void show() { System.out.println(country+":"); } } /

Java基础-代码执行顺序(重要)

Java代码初始化顺序:     1.由 static 关键字修饰的(如:类变量(静态变量).静态代码块)将在类被初始化创建实例对象之前被初始化,而且是按顺序从上到下依次被执行.静态(类变量.静态代码块)属于类本身,不依赖于类的实例.     2.没有 static 关键字修饰的(如:实例变量(非静态变量).非静态代码块)初始化实际上是会被提取到类的构造器中被执行的,但是会比类构造器中的代码块优先执行到,非静态(实例变量.非静态代码块)的地位是相等的,它们将按顺序被执行. 形参: 比如你定义一个

java编译器顺序-java读取代码顺序是从左往右还是从右往左

问题描述 java读取代码顺序是从左往右还是从右往左 java编译器读取每行代码顺序是从左往右还是从右往左 例如 int a=1; int b=2; int c=3; int d=a+b*c int d=a+b*c是从左往右读取还是按优先级读取 编译器读取每行代码都是从左往右读取吗 解决方案 也许你觉得从左到右是很天经地义的事情. 偏偏阿拉伯文就是从右到左的. 我们知道,windows.office这些软件都有阿拉伯语言的版本,也能正确处理这些语言. 那么微软是否需要为这些国家或者地区的人重新设

java在linux里设置环境变量后,提示没有那个目录?

问题描述 java在linux里设置环境变量后,提示没有那个目录? 我是放在./opt下的,所属人, 所属组也都设置完了, 请大牛.这是怎么回事,在线等 解决方案 root@ubuntu-2:~# cd /opt/java/jdk1.7 root@ubuntu-2:/opt/java/jdk1.7# cd bin root@ubuntu-2:/opt/java/jdk1.7/bin# ls appletviewer jarsigner javap jdb jps jvisualvm rmic t