按下java按钮3秒钟

按下java按钮3秒钟,java,button,swt,Java,Button,Swt,我创建了一个按钮,我想要这些: 当用户单击该按钮时,它会保持按下状态3秒钟。3秒钟后,按钮应再次看起来可按下。因此,用户不能在不等待3秒的情况下再次单击按钮。 我试过这些: { button3 = new Button(c20, SWT.PUSH | SWT.CENTER); button3.setText("QUERY"); button3.setBounds(205, 131, 62, 40); button3.addSelectionListener(new

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

当用户单击该按钮时,它会保持按下状态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) {
        }
    });
}
你有什么建议吗?

这对你有帮助吗

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

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

 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) {
    }
});
按钮3.addSelectionListener(新建SelectionListener()){
公共无效widgetSelected(SelectionEvent事件){
试一试{
线程t=新线程(){
整数计数=0;
setPressedIcon();
而(计数<4){
试一试{
睡眠(1000);
计数++;
}
}
setUnpressedIcon();
}
t、 start();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
setPressedIcon();//??
公共无效widgetDefaultSelected(SelectionEvent事件){
}
});
如果您在与UI相同的线程中执行此操作,则所有操作都将在3秒内停止

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
添加到它中

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

private void setPressedIcon(){
 try {
  button3.setEnabled(false);
  Thread.sleep(3000);
 } catch(InterruptedException e) {
 } finally {
   //reenable the button in all cases
   button3.setEnabled(true);
} 

不要使用按钮,而要使用切换按钮。这样你就可以按你需要的时间按住它

final boolean button pressed[]=新的boolean[]{false};
最终按钮=新按钮(组件、开关切换);
按钮设置文本(“测试”);
addSelectionListener(新建SelectionAdapter(){
@凌驾
公共无效WidgeSelected(SelectionEvent e){
如果(按下按钮[0]){
按钮。设置选择(true);
返回;
}
按钮按下[0]=真;
Display.getDefault().timerExec(3000,新的Runnable()){
@凌驾
公开募捐{
按钮。设置选择(假);
按钮按下[0]=错误;
}
});
}
});


您是否尝试过使用倒计时,并在按钮处于活动状态时禁用该按钮?当你按下按钮时禁用它,然后启动计时器,然后在计时器结束时重新启用它,这应该是相当简单的。要制作计时器,您可以使用整数计数器,也可以使用timer类点击系统时钟。为方便起见,我可以使用“for loops”等待吗?@hassasin swing计时器比使用for loops更好。它是为这样的事情而设计的。@hassasin for loops会杀死你的CPU,使你的应用程序没有响应。为此,请使用适当的摆动计时器。永远不要在EDT(事件调度线程)上执行长时间运行的操作。这与您之前提出的问题完全相同。不要那样做。改进你以前的问题,或者如果你不满意的话,要求澄清答案。这有一个隐含的缺陷,除非你在自己的线程上有按钮,否则应用程序将挂起3秒钟,使所有的东西,而不仅仅是按钮,都没有响应。最好使用一个计时器,并在事件侦听器之外给它一个单独的条件。为什么我会得到“类型按钮的方法addActionListener(new ActionListener(){})未定义”错误?最初您提到的是swing。swing包含动作侦听器。你可以在你的选择列表中更新它你能告诉我如何使用定时器吗?在下面的回答中,他/她使用定时器,但我得到了“构造函数定时器(int,new SelectionListener(){})未定义”错误?原因可能是什么?原因是您不了解Java的基本原理。在本例中,请查阅有关构造函数和类定义的教程;(此方法需要正文而不是分号)?更新Swing组件不应从该线程开始,而应从EDT开始。以及为什么使用
while
循环睡眠几秒钟而不是只使用
Tread.sleep
和所需时间的任何原因。如果使用处理程序,EDT仍然可能发生这种情况。除了明确表示我们在数秒之外,没有其他理由。这些@Override是什么意思?=)Sorry这意味着它重写了一个超类的方法,或者从接口实现了一个方法。这就是Java的基本知识。我还发现:构造函数计时器(int,new SelectionListener(){})是undefined@hassasin如果这些类型的错误消息是一个问题,那么您应该从基本的Java教程开始。我到处都找不到答案,为什么我会犯这个错误!!!!