SWT中怎么检测到button的一直按状态 
 
 
我想做个button,一直按住它,上面的canvas 图形可以一直向一个方向移动,但我怎么查都查不到怎么检测到button的"一直按"状态或事件. mouseDown不行,按住只能做一个工作,也就是移动一下.多谢各位,小弟真的很急! 

解决方案 »

  1.   

    有mouseDown事件,没有mouseUp事件就是一直按的状态!
      

  2.   


    但是我用mouseDown,只有按下的时候才做件事情
    final Button buttonPhotoBack = new Button(compositePhoto, SWT.NONE);
    buttonPhotoBack.addMouseListener(new MouseAdapter() {
    public void mouseDown(final MouseEvent e) {
    System.out.print(1);

    }
    });这是代码,如果按下鼠标,是打印一个1,再按才再打.我想要的是按下鼠标会一直打印1,抬起鼠标打印就停止了.
    多谢!
      

  3.   


    int flag=1;
    final Button buttonPhotoBack = new Button(compositePhoto, SWT.NONE); 
       buttonPhotoBack.addMouseListener(new MouseAdapter() { 
       public void mouseDown(final MouseEvent e) { 
       while(flag==1){
        System.out.print(1);
    }

    }); 
    mouseUp的时候把flag设为0;
    如果不行的话 可以考虑用线程来做。
      

  4.   

    final Runnable r = new Runnable() {
          public void run() {
         buttonPhotoBack.addMouseListener(new MouseAdapter() {
        
         public void mouseUp(final MouseEvent e) 
         {
         done = true;
         }
         });
          }
        };
        
        final Thread applicationThread = new Thread("applicationThread") {
          public void run() {
        
            display.syncExec(r);
          
          }
        };
        applicationThread.start(); buttonPhotoBack = new Button(compositePhoto, SWT.NONE);
    buttonPhotoBack.addMouseListener(new MouseAdapter() {
    public void mouseDown(final MouseEvent e) {
    done = false;
    //if (display.getThread() == Thread.currentThread()) { //System.out.println(display.getThread().getName());
    //}

                           


      while(done == false){

    System.out.println(22);}



    //System.out.println(Thread.currentThread().getName());
    }
    public void mouseUp(final MouseEvent e) {
    }
    });
        还是不行...
      

  5.   

    弱弱的说一句, 可以 在上面贴个GIF动画, 不行吗?
      

  6.   

    递归调用 mouseDown 
      

  7.   

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.event.*;import sun.awt.resources.awt;
    public class DownButton{
     public static void main(String[] args)
     {
     AboutFrame frame =new AboutFrame();
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           frame.show();     
     }
    }class AboutFrame extends JFrame implements Runnable
    {
     private int flag;
     private Thread thread1 = new Thread(this);
        public AboutFrame()
        {
           setSize(400,300);
           setResizable(false);
           setTitle("关于");
           Toolkit tk=Toolkit.getDefaultToolkit();
           Image ff=tk.getImage("false.gif");
           setIconImage(ff);
           Dimension screenSize=tk.getScreenSize();
           setLocation((screenSize.width-400)/2,(screenSize.height-300)/2);
           flag=0;
           JPanel panel = new JPanel();
           
           Button buttonPhotoBack = new Button("downed"); 
              buttonPhotoBack.addMouseListener(new MouseAdapter() { 
              public void mousePressed( MouseEvent e) {
               System.out.println(1);
               flag = 1;
               runThread();
              } 
            });
              
              buttonPhotoBack.addMouseListener(new MouseAdapter() { 
                  public void mouseReleased( MouseEvent e) { 
                   flag = 0;
                   stopThread();
                  } 
                });
              panel.add(buttonPhotoBack);
           Container con=getContentPane();
           con.add(panel);
        }    public void runThread(){
         thread1.start();
         try {
    thread1.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
        }
        
        public void stopThread(){
         thread1.stop();
        }
        
    public void run() {
    while(flag == 1){
    System.out.println("1");
    }
    }     
    }刚学swing ,第一次用线程,有很多问题在里面,试试