效果图
![](https://img-blog.csdnimg.cn/direct/50224712f6ec433687785cef596f9a7e.gif)
SwingClickRunner
import java.awt.*;
public class SwingClickRunner implements Runnable {
//间隔时长
private static final int SINGLE_CLICK_DELAY = 200;
private final Runnable onSingleClick;
private boolean aborted = false;
public SwingClickRunner(Runnable onSingleClick) {
this.onSingleClick = onSingleClick;
}
public void abort() {
this.aborted = true;
}
@Override
public void run() {
try {
Thread.sleep(SINGLE_CLICK_DELAY);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (!aborted) {
EventQueue.invokeLater(() -> onSingleClick.run());
}
}
}
使用
private SwingClickRunner latestClickRunner = null;
public void Test(){
tree.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int c = e.getButton();
if (c == MouseEvent.BUTTON1){ // 判断是鼠标左键按下
//单击操作
if (e.getClickCount() == 1) {
latestClickRunner = new SwingClickRunner(() -> {
//单击操作写在这里
System.out.println("单击");
});
CompletableFuture.runAsync(latestClickRunner);
}
//双击操作
if (e.getClickCount() == 2) {
if (latestClickRunner != null) {
latestClickRunner.abort();
}
}
}
if (c == MouseEvent.BUTTON3) {// 判断是鼠标右键按下
//单击操作
if (e.getClickCount() == 1) {
System.out.println("单击11");
latestClickRunner = new SwingClickRunner(() -> {
System.out.println("单击");
//单击操作写在这里
mouseRoleTreeMenu(e,tree);
});
CompletableFuture.runAsync(latestClickRunner);
}
//双击操作
if (e.getClickCount() == 2) {
if (latestClickRunner != null) {
latestClickRunner.abort();
System.out.println("双击");
}
}
}
}
});
}