如何在Swing中,进行某个操作,而不触发事件监听
2009-07-24 14:11
411 查看
如,在单选框中,如果选中单选或者是取消选中时会触发事件监听,但是有时候选中或取消选中时又不希望触发事件监听,则可如下实现:
/**
* selected:是否选中,fireListener:是否需要监听
*/
public void setSelected(boolean selected, boolean fireListener) {
//如果需要监听,则直接调用父类的设置方法
if (fireListener) {
setSelected(selected);
return;
}
//不需要监听的情况
//判断对某种model的支持
if (getModel() instanceof JToggleButton.ToggleButtonModel) {
//获取所有的changeListeners
ChangeListener[] changeListeners = ((JToggleButton.ToggleButtonModel) getModel()).getChangeListeners();
//获取所有的itemListeners
ItemListener[] itemListeners = ((JToggleButton.ToggleButtonModel) getModel()).getItemListeners();
//删除所有的changeListeners和itemListeners
if (changeListeners != null) {
for (int i = 0; i < changeListeners.length; i++) {
getModel().removeChangeListener(changeListeners[i]);
}
}
if (itemListeners != null) {
for (int i = 0; i < itemListeners.length; i++) {
getModel().removeItemListener(itemListeners[i]);
}
}
//由于上面的两个监听都不删除,所有在进行设置值时就没有相关的监听,
setSelected(selected);
//值设置完后再把原本有的监听给添加回去
if (changeListeners != null) {
for (int i = 0; i < changeListeners.length; i++) {
getModel().addChangeListener(changeListeners[i]);
}
}
if (itemListeners != null) {
for (int i = 0; i < itemListeners.length; i++) {
getModel().addItemListener(itemListeners[i]);
}
}
repaint();
} else {
setSelected(selected);
}
}
/**
* selected:是否选中,fireListener:是否需要监听
*/
public void setSelected(boolean selected, boolean fireListener) {
//如果需要监听,则直接调用父类的设置方法
if (fireListener) {
setSelected(selected);
return;
}
//不需要监听的情况
//判断对某种model的支持
if (getModel() instanceof JToggleButton.ToggleButtonModel) {
//获取所有的changeListeners
ChangeListener[] changeListeners = ((JToggleButton.ToggleButtonModel) getModel()).getChangeListeners();
//获取所有的itemListeners
ItemListener[] itemListeners = ((JToggleButton.ToggleButtonModel) getModel()).getItemListeners();
//删除所有的changeListeners和itemListeners
if (changeListeners != null) {
for (int i = 0; i < changeListeners.length; i++) {
getModel().removeChangeListener(changeListeners[i]);
}
}
if (itemListeners != null) {
for (int i = 0; i < itemListeners.length; i++) {
getModel().removeItemListener(itemListeners[i]);
}
}
//由于上面的两个监听都不删除,所有在进行设置值时就没有相关的监听,
setSelected(selected);
//值设置完后再把原本有的监听给添加回去
if (changeListeners != null) {
for (int i = 0; i < changeListeners.length; i++) {
getModel().addChangeListener(changeListeners[i]);
}
}
if (itemListeners != null) {
for (int i = 0; i < itemListeners.length; i++) {
getModel().addItemListener(itemListeners[i]);
}
}
repaint();
} else {
setSelected(selected);
}
}
相关文章推荐
- SWING 如何进行事件监听
- js监听Enter事件的触发进行查找
- javaweb当中通过点击一个按钮来触发事件进行制定页面的跳转操作
- 事件捕获,点击其他body的其他区域,对body特定区域进行操作且排除此区域点击触发
- 【Tangram】 通过监听进行事件触发
- 如何解决OnTouch监听事件只监听到DOWN操作,没有监听到MOVE和UP操作
- Java Swing复习(3)JMenu,做一个文本编辑器,涉及读和写操作,事件监听,处理
- swing登陆程序的异步loading效果,避免程序假死状态?swing 后台操作事件长 , 界面如何显示正在等待?
- 【移动GIS】如何监听地图操作事件?
- libev如何使用epoll进行事件监听
- js---JavaScript中的事件委托/事件代理,如何通过事件委托进行异步DOM事件监听
- 项目学习——后台事件监听并触发相应操作
- 在开发ajax程序的时候,如何方便地进行数据库操作
- android 中如何监听按键的长按事件
- Java 如何对文件进行多个Object对象流的读写操作
- 如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
- Java Swing界面编程(25)---事件处理:鼠标事件及监听处理
- Linux vi编辑后如何进行保存操作
- Java GUI编程中如何进行事件处理机制
- 在sqlserver中如何对text类型的数据进行replace操作。 MS-SQL Server / 基础类 - CSDN社区 community.csdn.net