2

我创建了一个按钮,我想要这些:

当用户单击按钮时,它会保持按下状态 3 秒。3 秒后按钮应该再次看起来可以按下。所以用户不能在不等待 3 秒的情况下再次单击该按钮。我试过这些:

{
    button3 = new Button(c20, SWT.PUSH | SWT.CENTER);
    button3.setText("QUERY");
    button3.setBounds(205, 131, 62, 40);
    button3.addSelectionListener(new SelectionListener() {
        public void widgetSelected(SelectionEvent event) {
            try {
                start_query();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

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

你有什么建议吗?

4

5 回答 5

4

愿这对你有帮助

btn.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            btn.setEnabled(false);
            doSomething() ;
            btn.setEnabled(true);
        }
    });
于 2012-12-10T17:08:00.320 回答
2

单击按钮时,您需要生成一个新线程。

 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) {
    }
});

如果您在与 UI 相同的线程中执行此操作,则所有内容都将在 3 秒内停止。

于 2012-12-10T17:09:16.450 回答
1
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();
 }
});

我从@vels4j 那里得到了答案并添加javax.swing.Timer

于 2012-12-10T17:22:39.757 回答
1

不要使用 PUSH Button,而是使用 TOGGLE 按钮。这样,您可以根据需要一直按住它。

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;
            }
        });
    }
});
于 2012-12-14T09:09:21.877 回答
0

尝试禁用它,让线程休眠三秒钟,然后再次启用它:

private void setPressedIcon(){
 try {
  button3.setEnabled(false);
  Thread.sleep(3000);
 } catch(InterruptedException e) {
 } finally {
   //reenable the button in all cases
   button3.setEnabled(true);
} 
于 2012-12-14T08:58:30.563 回答