您的位置:首页 > 其它

如何在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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: