千千静听 窗口自动粘合,java 代码实现 源码分析
笔者这几天在写 基于 jmf 的 音乐播放器。 今天无意中想要加上,“窗口自动粘合”。在这里把所有问题全写出来。 在这里说明一下,我使用的是两个 窗体,MainView(主界面) PlayList(播放列表)。 先把用到的方法写出来: 得到窗体作标: .getBounds().x .getBounds().y 窗体宽高: .getBounds().width getBounds().height 窗体拖动事件,见上一篇日志。(注意:事件是在窗体位置发生改变后执行,不是拖动中执行) 用到的变量及类,方法: 两个 boolean 1,state =true (窗体状态)2,AutopashState=true(线程执行条件) 一个多线程类,我这里写的是一个内部类,继承 Runnable 然后 在MainView 构造方法中设定开始执行。 见run方法 public void run() { if(playlist!=null) state=true; } 2,事件处理程序 public void ancestorMoved(AncestorEvent event) { // 当时头大,没有想到,可以用 MainView.this..getBounds() 异常分析: 1,当拖动窗体所触发事件: CPU时间段1; 2,时时检测两窗体状态 : CPU时间段2; if(CPU时间段1>CPU时间段2)// 在这里说的就是哪个先执行完,CPU时间段不存在长段。 正常。 else if(CPU时间段1>CPU时间段2)// 也就是说 1 执行的条件发生了变化。据我分析也是正常的 ,因为 此方法是从顺序执行。不是时时检测。 说明: 当拖动窗体时,线程检测程序,会分出一个线程用来检测,时时处理数据。当用户还在拖动未松开鼠标时,这时两个线程并行执行。所以 state 的值被赋值 false ,因为这个时候,第二个窗体的位置还没有变化,大于了20 。我刚才说了,这是两个线程在并行执行,所以哪个先执行谁也说不定,因为CPU不是那么听话。 以上是最正确的代码。 下面说一下错误之处 有人说时时改变不就行了,我想他说的可能是这样。 1,事情想的太简单 Rectangle rec= getXY(); // 低级程序员的想法 if(playlist.getBounds().x < (getXY().x+getXY().width+20) && playlist.setLocation(x+rec.width, y); 这样做也不全算错,如果窗体第次移动20个单位,那是正常的,如果移动的多了就不管事了 原因分析: 假设两窗体距离在 20个单位之内时,当移动 主窗体 MainView 时,程序会比较 如果发现两个窗体相距的X作标相差在20个单位之内时,便会改变,否则不执行。 2,没有认真分析代码 if(state) { 代码分析:如注释所注,当线程停止时,也就不会有程序检测了所以一直为真。这样的效果就是,不管两窗体相距多远,都会自动 “粘到一起”。 3,有人说那就把else 去掉放在 if () 语句最下方。 if(state) AutopashState=true; // 这个我也试验过了,可是有时会出异常,原因 我现在还没想到,只 //是感觉 AutopashState=false; 没有执行。 |
千千静听 窗口自动粘合,java 代码实现 源码分析相关推荐
- mq补偿机制java代码_RocketMQ源码分析之消息消费机制-消费端消息负载均衡机制与重新分布 - Java 技术驿站-Java 技术驿站...
1.消息消费需要解决的问题 首先再次重复啰嗦一下RocketMQ消息消费的一些基本元素的关系 主题 ---> 消息队列(MessageQueue) 1 对多 主题 ----> 消息生产者, ...
- 基于ssh的航空订票系统-飞机订票系统javaweb-机票订购课程设计java代码(源码+数据库文件+文档)
基于ssh的航空订票系统-飞机订票系统javaweb-机票订购java代码(源码+数据库文件+文档) 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 作者:IT跃迁谷 1.开发环境 开发语言: ...
- Java集合类框架源码分析 之 LinkedList源码解析 【4】
上一篇介绍了ArrayList的源码分析[点击看文章],既然ArrayList都已经做了介绍,那么作为他同胞兄弟的LinkedList,当然必须也配拥有姓名! Talk is cheap,show m ...
- java.util.ServiceLoader源码分析
java.util.ServiceLoader源码分析 回顾: ServiceLoader类的使用(具体参考博客http://blog.csdn.net/liangyihuai/article/det ...
- 并发编程5:Java 阻塞队列源码分析(下)
上一篇 并发编程4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...
- Java并发-ReentrantReadWriteLock源码分析
ReentrantLock实现了标准的互斥重入锁,任一时刻只有一个线程能获得锁.考虑这样一个场景:大部分时间都是读操作,写操作很少发生:我们知道,读操作是不会修改共享数据的,如果实现互斥锁,那么即使都 ...
- Java容器 | 基于源码分析List集合体系
一.容器之List集合 List集合体系应该是日常开发中最常用的API,而且通常是作为面试压轴问题(JVM.集合.并发),集合这块代码的整体设计也是融合很多编程思想,对于程序员来说具有很高的参考和借鉴 ...
- JAVA集合专题+源码分析
文章目录 Java集合专题 集合和数组的区别 数组 集合 区别 集合体系结构介绍 单列集合 [Collection ] Collection接口 迭代器 迭代器原理 增强for循环 List接口 对集 ...
- java并发:join源码分析
join join join是Thread方法,它的作用是A线程中子线程B在运行之后调用了B.join(),A线程会阻塞直至B线程执行结束 join源码(只有继承Thread类才能使用) 基于open ...
- java activerecord.db_JFinal 源码分析 [DB+ActiveRecord]
我记得以前有人跟我说,"面试的时候要看spring的源码,要看ioc.aop的源码"那为什么要看这些开源框架的源码呢,其实很多人都是"应急式"的去读,就像读一篇 ...
最新文章
- DevC++怎么更改背景颜色
- 堪比“脏牛”!“脏管道” 漏洞可获得Linux 所有主流发行版本的root权限
- vmware挂载共享目录
- 9.Linux/Unix 系统编程手册(上) -- 进程凭证
- java jdom 类_JDOM 介绍及使用指南
- 大写金额用计算机简单些,小写金额转换为大写金额(C实现)
- 『Java CVE』CVE-2022-34169: Xalan-J XSLT整数截断漏洞PoC结构再浅析
- xss labs 挑战之旅
- 【经典】非你莫属的名句二
- [codeforces366C]Dima and Salad
- 网站获得高质量外链的两大绝招
- Android MediaPlayer 音乐播放器扫描 本地音乐、上一曲、下一曲切歌、播放本地音乐
- 创客集结号:无人机发展的技术难点
- JavaScript 执行机制
- 001---函数基础
- 180512 tensorboard高维数据可视化
- 夜光带你走进 管理系统开发(一)擅长的领域
- IPv6转换难点分析之一:国家监测指标
- 如何从内存卡恢复丢失的数据?简单内存卡(SD卡)数据恢复方法分享
- poweroff 关机命令