java button pressed for 3 seconds

天涯浪子 提交于 2019-12-02 03:36:42

May this help you

btn.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            btn.setEnabled(false);
            doSomething() ;
            btn.setEnabled(true);
        }
    });

You need to spawn a new thread when the button is clicked.

 button3.addSelectionListener(new SelectionListener() {
    public void widgetSelected(SelectionEvent event) {
        try {
            Thread t = new Thread(){
              int count = 0;
              setPressedIcon();
              while(count < 4){
                 try{
                  Thread.sleep(1000);
                  count++;
                 }
              }
              setUnpressedIcon();
            }
            t.start();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    setPressedIcon();///??
    public void widgetDefaultSelected(SelectionEvent event) {
    }
});

If you do it in the same thread as your UI, everything will be halted during the 3 seconds.

btn.addActionListener(new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent e) {
   btn.setEnabled(false);
   Timer timer = new Timer( 3000, new ActionListener(){
     @Override
     public void actionPerformed( ActionEvent e ){
       btn.setEnabled( true );
     }
   }
   timer.setRepeats( false );
   timer.start();
 }
});

I took the answer from @vels4j and added the javax.swing.Timer to it

Instead of using a PUSH Button, use a TOGGLE button. This way you can keep it pressed for as long as you require.

final boolean buttonPressed[] = new boolean[] { false };
final Button button = new Button(comp, SWT.TOGGLE);
button.setText("Test");
button.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent e) {
        if (buttonPressed[0]) {
            button.setSelection(true);              
            return;
        }

        buttonPressed[0] = true;
        Display.getDefault().timerExec(3000, new Runnable() {
            @Override
            public void run() {
                button.setSelection(false);
                buttonPressed[0] = false;
            }
        });
    }
});

Try disabling it, putting the thread to sleep for three seconds, then enable it again:

private void setPressedIcon(){
 try {
  button3.setEnabled(false);
  Thread.sleep(3000);
 } catch(InterruptedException e) {
 } finally {
   //reenable the button in all cases
   button3.setEnabled(true);
} 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!