很多地方都能看到类似 fireContentsChanged 的处理,但一直不明白它的作用,jdk上只说了一个或多个元素发生更改之后调用此方法。但没说什么要调用,处理作用及意义是什么,最好有示例说明。public class DefaultComboBoxModel extends AbstractListModel implements MutableComboBoxModel, Serializable {    public void setSelectedItem(Object anObject) {
        if ((selectedObject != null && !selectedObject.equals( anObject )) ||
    selectedObject == null && anObject != null) {
    selectedObject = anObject;
    fireContentsChanged(this, -1, -1);
        }
    }
}

解决方案 »

  1.   

    父类的处理代码,不明白为什么要这样处理,所以一直没看懂。protected void fireContentsChanged(Object source, int index0, int index1)
        {
    Object[] listeners = listenerList.getListenerList();
    ListDataEvent e = null; for (int i = listeners.length - 2; i >= 0; i -= 2) {
        if (listeners[i] == ListDataListener.class) {
    if (e == null) {
        e = new ListDataEvent(source, ListDataEvent.CONTENTS_CHANGED, index0, index1);
    }
    ((ListDataListener)listeners[i+1]).contentsChanged(e);
        }        
    }
        }
      

  2.   

    Java事件机制,你可以用Google搜相关资料,推荐一篇博文《Java事件传送技术》,具体地址忘了。fireContentsChanged是将事件通知给ListDataListener,方法中的for循环就是传递内容改变事件给所有的监听者,这里是JComboBox自身(可以查看JComboBox中有contentsChanged方法),通知其后台内容改变。