是否可以以标准方式执行此操作?

这是场景.

>开始在EDT中做一些昂贵的事情(EDT被阻止,直到昂贵的操作结束).

>当EDT被阻止时,用户继续单击/拖动鼠标按钮.所有鼠标操作都记录在某处.

>当EDT是免费的(用昂贵的东西完成)时,它开始处理鼠标事件.

我在步骤3中想要的是丢弃堆积的鼠标事件.在EDT免费之后,任何新的鼠标事件都应该以通常的方式处理.

关于如何实现这一点的任何想法.

PS:我不可能阻止EDT被阻止(我不控制程序中某些模块的行为).

编辑:

如果我可以安全地调用“SunToolkit.flushPendingEvents()”,那么在开始EDT中昂贵的操作之前,我总是可以放一个玻璃板.在昂贵的操作结束后,在EDT线程上,冲洗所有事件 – 他们将进入一个不做任何事情的玻璃窗格.然后让EDT正常工作.

EDIT2:

我添加了一个SSCCE来演示这个问题.

public class BusyCursorTest2 extends javax.swing.JFrame {

public BusyCursorTest2() {

javax.swing.JButton wait = new javax.swing.JButton("Wait 3 seconds");

getContentPane().setLayout(new java.awt.GridLayout(2, 1, 0, 0));

getContentPane().add(wait);

getContentPane().add(new javax.swing.JToggleButton("Click me"));

setTitle("Busy Cursor");

setSize(300, 200);

setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);

setVisible(true);

wait.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent event) {

final java.util.Timer timer = switchToBusyCursor(BusyCursorTest2.this);

try {

//do something expensive in EDT

try {

Thread.sleep(3000);

} catch (InterruptedException e) {

//do nothing

}

} finally {

switchToNormalCursor(BusyCursorTest2.this, timer);

}

}

});

}

public static java.util.Timer switchToBusyCursor(final javax.swing.JFrame frame) {

startEventTrap(frame);

java.util.TimerTask timerTask = new java.util.TimerTask() {

public void run() {

startWaitCursor(frame);

}

};

final java.util.Timer timer = new java.util.Timer();

timer.schedule(timerTask, DELAY_MS);

return timer;

}

public static void switchToNormalCursor(final javax.swing.JFrame frame, final java.util.Timer timer) {

timer.cancel();

stopWaitCursor(frame);

stopEventTrap(frame);

}

private static void startWaitCursor(javax.swing.JFrame frame) {

frame.getGlassPane().setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.WAIT_CURSOR));

frame.getGlassPane().addMouseListener(mouseAdapter);

frame.getGlassPane().setVisible(true);

}

private static void stopWaitCursor(javax.swing.JFrame frame) {

frame.getGlassPane().setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.DEFAULT_CURSOR));

frame.getGlassPane().removeMouseListener(mouseAdapter);

frame.getGlassPane().setVisible(false);

}

private static void startEventTrap(javax.swing.JFrame frame) {

frame.getGlassPane().addMouseListener(mouseAdapter);

frame.getGlassPane().setVisible(true);

}

private static void stopEventTrap(javax.swing.JFrame frame) {

frame.getGlassPane().removeMouseListener(mouseAdapter);

frame.getGlassPane().setVisible(false);

}

private static final java.awt.event.MouseAdapter mouseAdapter = new java.awt.event.MouseAdapter() {

};

public static void main(String[] args) {

javax.swing.SwingUtilities.invokeLater(new Runnable() {

public void run() {

new BusyCursorTest2();

}

});

}

private static final int DELAY_MS = 250;

}

>运行SSCCE

>单击“等待3秒”按钮.它模拟了昂贵的操作.鼠标光标将变为忙碌.

>当光标处于忙碌状态时,单击切换按钮“单击我”.如果在三秒钟后,切换按钮改变其状态,则切换按钮接收到鼠标事件并且没有被捕获.

我希望在光标看起来很忙时,生成的鼠标(和其他)事件将被丢弃.

谢谢.

java swing结束事件_java swing清除事件队列相关推荐

  1. java 鼠标悬停事件_java swing中如何实现对于鼠标监听悬停事件

    展开全部 import java.awt.Container; import java.awt.Dimension; import java.awt.event.ActionEvent; import ...

  2. java swing 删除事件_java swing清除事件队列

    是否可以以标准方式执行此操作? 这是场景. >开始在EDT中做一些昂贵的事情(EDT被阻止,直到昂贵的操作结束). >当EDT被阻止时,用户继续单击/拖动鼠标按钮.所有鼠标操作都记录在某处 ...

  3. java swing单选按钮点击事件_java Swing中点击不同单选按钮JPanel中部分区域进行改变,如何实现?。。急啊!...

    展开全部 public class NewJFrame extends javax.swing.JFrame { /** Creates new form NewJFrame */ public Ne ...

  4. java swing实现计算器_Java swing实现的计算器功能完整实例

    本文实例讲述了Java swing实现的计算器功能.分享给大家供大家参考,具体如下: package awtDemo; import java.awt.*; import java.awt.event ...

  5. java记事本复制粘贴_Java Swing 如何实现记事本中“编辑”菜单下的 剪切,复制,粘贴,删除,全选 功能...

    这篇文字将要学习以下知识点: 1.如何给JButton按钮添加鼠标点击事件监听器 #1.addMouseListener(MouseListener l)  给JButton添加一个鼠标点击监听器l ...

  6. java窗口程序实例_Java Swing快速构建窗体应用程序

    以前接触java感觉其在桌面开发上,总是不太方便,没有一个好的拖拽界面布局工具,可以快速构建窗体. 最近学习了一下NetBeans IDE 8.1,感觉其窗体设计工具还是很不错的 , 就尝试一下做了一 ...

  7. java歌词解析器_Java swing实现音乐播放器桌面歌词字体变色效果|chu

    最近看到某音乐播放器的桌面歌词如下图 其中字母"U"有两种颜色,突发奇想想模仿一下实现文字变色. 思路:使用两种颜色分别把字符串绘制到两个BufferedImage中,然后根据两种 ...

  8. java flowlayout 左对齐_Java Swing组件布局管理器之FlowLayout(流式布局)入门教程

    本文实例讲述了Java Swing组件布局管理器之FlowLayout(流式布局).分享给大家供大家参考,具体如下: FlowLayout应该是Swing布局管理器学习中最简单.最基础的一个.所谓流式 ...

  9. java实现五子棋窗口_Java swing五子棋的实现方法

    今天给大家介绍一下如何用Java swing实现五子棋的开发即用Java开发图形界面程序五子棋,代码由于太多,只贴部分,最下面会附上下载地址,废话不多说,下面我们先看一下运行结果: 接下来我们看代码: ...

  10. java swing 控件_Java Swing组件

    一.        java swing 组件技术简介 1.swing的特性 l  是AWT的扩展,swing比AWT提供了更多的组件和外观 l  它是纯java代码编写(除了JFrame.JDial ...

最新文章

  1. 年纪最小90后,他们在北大教AI
  2. 两个简单的动态规划问题,0-1背包和最大不相邻数累加和,附递归c代码
  3. 线程池的原理和连接池的原理
  4. python初学者用什么开发环境_python初学者用什么开发环境
  5. MATLAB警告: 矩阵为奇异工作精度
  6. mysql删除外键_MySQL删除外键定义的方法
  7. JS中的location.href
  8. proc文件系统探索 之 以数字命名的目录
  9. RAC RMAN备份
  10. 探究streambuf
  11. 基于RPC原理的Dubbo
  12. Python 画数学函数图像 matplotlib.pyplot
  13. 【阿里巴巴Java编程规范学习 四】Java质量安全规约
  14. 介绍几款WAP网页制作工具(提供下载)
  15. VS Code 安装 VSIX 插件
  16. arduino并口屏_74HC595等串口转并口芯片的Arduino实用封装
  17. 前端页面 div+css内容太长,实现点击展开余下全文(修改版)
  18. 色彩配色基础泛谈《第一天》到底说了麻?
  19. CAD编辑指南4:新建空白图纸以及添加文字标注
  20. C# Task不执行的一种情况

热门文章

  1. Deep Learning for NLP Best Practices
  2. 第四季-专题16-触摸屏驱动程序设计
  3. python网络编程01/网络协议
  4. DTCMS插件的制作实例电子资源管理(二)Admin后台页面编写
  5. Jenkins实现持续集成 上传远程服务器war 并执行sh脚本重启
  6. 30个灵感来自大自然的国外网页设计作品欣赏
  7. 2008年8月30日人力资源系统启动会
  8. 如何设置高度为1的分隔线
  9. 当线程在捕捉异常,即使马上杀掉线程,捕捉到异常之后仍然执行异常处理程序...
  10. 50. Pow(x, n) (MATH)