我创建了一个按钮,我想要这些:
当用户点击按钮时,按下按钮就像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) {
}
});
}
你有什么建议吗?
答案 0 :(得分:4)
这可以帮助你
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
btn.setEnabled(false);
doSomething() ;
btn.setEnabled(true);
}
});
答案 1 :(得分: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秒内停止。
答案 2 :(得分: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
添加到了
答案 3 :(得分:1)
使用TOGGLE按钮代替使用PUSH Button
。这样,只要您需要,就可以按住它。
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;
}
});
}
});
答案 4 :(得分:0)
尝试禁用它,让线程休眠三秒钟,然后再次启用它:
private void setPressedIcon(){
try {
button3.setEnabled(false);
Thread.sleep(3000);
} catch(InterruptedException e) {
} finally {
//reenable the button in all cases
button3.setEnabled(true);
}