java swing结束事件_java swing清除事件队列
是否可以以标准方式执行此操作?
这是场景.
>开始在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清除事件队列相关推荐
- java 鼠标悬停事件_java swing中如何实现对于鼠标监听悬停事件
展开全部 import java.awt.Container; import java.awt.Dimension; import java.awt.event.ActionEvent; import ...
- java swing 删除事件_java swing清除事件队列
是否可以以标准方式执行此操作? 这是场景. >开始在EDT中做一些昂贵的事情(EDT被阻止,直到昂贵的操作结束). >当EDT被阻止时,用户继续单击/拖动鼠标按钮.所有鼠标操作都记录在某处 ...
- java swing单选按钮点击事件_java Swing中点击不同单选按钮JPanel中部分区域进行改变,如何实现?。。急啊!...
展开全部 public class NewJFrame extends javax.swing.JFrame { /** Creates new form NewJFrame */ public Ne ...
- java swing实现计算器_Java swing实现的计算器功能完整实例
本文实例讲述了Java swing实现的计算器功能.分享给大家供大家参考,具体如下: package awtDemo; import java.awt.*; import java.awt.event ...
- java记事本复制粘贴_Java Swing 如何实现记事本中“编辑”菜单下的 剪切,复制,粘贴,删除,全选 功能...
这篇文字将要学习以下知识点: 1.如何给JButton按钮添加鼠标点击事件监听器 #1.addMouseListener(MouseListener l) 给JButton添加一个鼠标点击监听器l ...
- java窗口程序实例_Java Swing快速构建窗体应用程序
以前接触java感觉其在桌面开发上,总是不太方便,没有一个好的拖拽界面布局工具,可以快速构建窗体. 最近学习了一下NetBeans IDE 8.1,感觉其窗体设计工具还是很不错的 , 就尝试一下做了一 ...
- java歌词解析器_Java swing实现音乐播放器桌面歌词字体变色效果|chu
最近看到某音乐播放器的桌面歌词如下图 其中字母"U"有两种颜色,突发奇想想模仿一下实现文字变色. 思路:使用两种颜色分别把字符串绘制到两个BufferedImage中,然后根据两种 ...
- java flowlayout 左对齐_Java Swing组件布局管理器之FlowLayout(流式布局)入门教程
本文实例讲述了Java Swing组件布局管理器之FlowLayout(流式布局).分享给大家供大家参考,具体如下: FlowLayout应该是Swing布局管理器学习中最简单.最基础的一个.所谓流式 ...
- java实现五子棋窗口_Java swing五子棋的实现方法
今天给大家介绍一下如何用Java swing实现五子棋的开发即用Java开发图形界面程序五子棋,代码由于太多,只贴部分,最下面会附上下载地址,废话不多说,下面我们先看一下运行结果: 接下来我们看代码: ...
- java swing 控件_Java Swing组件
一. java swing 组件技术简介 1.swing的特性 l 是AWT的扩展,swing比AWT提供了更多的组件和外观 l 它是纯java代码编写(除了JFrame.JDial ...
最新文章
- 年纪最小90后,他们在北大教AI
- 两个简单的动态规划问题,0-1背包和最大不相邻数累加和,附递归c代码
- 线程池的原理和连接池的原理
- python初学者用什么开发环境_python初学者用什么开发环境
- MATLAB警告: 矩阵为奇异工作精度
- mysql删除外键_MySQL删除外键定义的方法
- JS中的location.href
- proc文件系统探索 之 以数字命名的目录
- RAC RMAN备份
- 探究streambuf
- 基于RPC原理的Dubbo
- Python 画数学函数图像 matplotlib.pyplot
- 【阿里巴巴Java编程规范学习 四】Java质量安全规约
- 介绍几款WAP网页制作工具(提供下载)
- VS Code 安装 VSIX 插件
- arduino并口屏_74HC595等串口转并口芯片的Arduino实用封装
- 前端页面 div+css内容太长,实现点击展开余下全文(修改版)
- 色彩配色基础泛谈《第一天》到底说了麻?
- CAD编辑指南4:新建空白图纸以及添加文字标注
- C# Task不执行的一种情况
热门文章
- Deep Learning for NLP Best Practices
- 第四季-专题16-触摸屏驱动程序设计
- python网络编程01/网络协议
- DTCMS插件的制作实例电子资源管理(二)Admin后台页面编写
- Jenkins实现持续集成 上传远程服务器war 并执行sh脚本重启
- 30个灵感来自大自然的国外网页设计作品欣赏
- 2008年8月30日人力资源系统启动会
- 如何设置高度为1的分隔线
- 当线程在捕捉异常,即使马上杀掉线程,捕捉到异常之后仍然执行异常处理程序...
- 50. Pow(x, n) (MATH)