TGP*_*994 21 java swing jlist java-7 listselectionlistener
我最近遇到了一个java中的错误,其中JList在使用鼠标更改值时将触发valueChanged()方法两次,并且在使用键盘更改值时仅触发一次.我刚刚在Oracle的网站上发现了一个关于此问题的错误(显然,这个错误超过了12年),我想知道是否有人可以向我解释为什么Oracle已经确定这不是缺陷(更不用说getValueIsAdjusting()在使用键盘时返回false.
对于有这个问题的任何人,我发现只是检查何时getValueIsAdjusting()是假的,然后运行我的方法的其余部分将解决问题.
Mik*_*rin 44
有一个简单的解释.
使用鼠标应用选择时,执行操作列表:
1.在某个元素上按鼠标左键
- 列表选择鼠标下的元素并触发第1个事件
- 此处你将得到getValueIsAdjusting = true,因为鼠标尚未发布
2.您可以拖动鼠标而不释放它以更改选择
- 列表将为每个选择更改触发一个附加事件
- getValueIsAdjusting对于每个事件也将为true,因为您仍在进行更改
3.您释放鼠标
- 列表将触发最终事件 - 选择操作已完成
- getValueIsAdjusting = false现在,您可以通过最终选择执行任何操作
总结一下 - 这些额外的事件被激发,让你完全控制选择变化的列表行为(准确地说是选择变更序列).当getValueIsAdjusting = true时,您可能希望忽略选择更改,因为始终会有getValueIsAdjusting = false的最终事件,它将通知您选择更改已完成.
此外,当您使用键按钮更改选择时,列表将不知道您是否要在第一次按键后更改它,因此对于此类更改,getValueIsAdjusting将始终为false.
小智 23
有一个简单的解决方案:
private void jList1 ValueChanged(javax.swing.event.ListSelectionEvent evt) {
if (!evt.getValueIsAdjusting()) {//This line prevents double events
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14041 次 |
| 最近记录: |