📄 abstractdocument.java
字号:
/* * JRemCntl - Copyright (C) 2007 Filippo Di Vattimo <fildiv@gmail.com> * See COPYING */package fildiv.jremcntl.server.gui.core;import java.util.ArrayList;import java.util.Hashtable;import java.util.Iterator;import java.util.List;import java.util.Map;public abstract class AbstractDocument implements Document { protected final DocumentEvent DOC_ATTACHED_EVENT; protected final DocumentEvent DOC_DETACHED_EVENT; protected final DocumentEvent DOC_MODIFIED_EVENT; protected final int GENERIC_MODIFIED_TYPE = 0; private List listeners; private Map cachedEvents; private boolean modified; private int silentModeCount; public AbstractDocument() { DOC_ATTACHED_EVENT = new DocumentAttachedEvent(this); DOC_DETACHED_EVENT = new DocumentDetachedEvent(this); DOC_MODIFIED_EVENT = new DocumentModifiedEvent(this); } public void addActionListener(DocumentListener listener) { getListeners().add(listener); listener.actionPerformed(DOC_ATTACHED_EVENT); } public void removeActionListener(DocumentListener listener) { getListeners().remove(listener); listener.actionPerformed(DOC_DETACHED_EVENT); } protected List getListeners() { if (listeners == null) listeners = new ArrayList(); return listeners; } public boolean isModified() { return modified; } protected void setModified(boolean modified) { this.modified = modified; } public boolean isSilentMode() { return silentModeCount > 0; } public void setSilentMode(boolean silent) { int value = silent ? 1 : -1; int newSilentModeCount = silentModeCount + value; if (newSilentModeCount < 0) throw new IllegalStateException(); if (newSilentModeCount == 0) firePendingEvents(); silentModeCount = newSilentModeCount; } private void firePendingEvents() { if (cachedEvents == null) return; try { for (Iterator i = cachedEvents.values().iterator(); i.hasNext(); ) { DocumentEvent event = (DocumentEvent) i.next(); fireEventHelper(event); } } finally { cachedEvents = null; } } protected void fireGenericModifyEvent() { fireModifyEvent(GENERIC_MODIFIED_TYPE); } protected void fireModifyEvent(int modifyType) { fireModifyEvent(this, modifyType, null); } protected void fireModifyEvent(Object affectObject, int modifyType) { fireModifyEvent(affectObject, modifyType, null); } protected void fireModifyEvent(int modifyType, Object modifySupport) { fireModifyEvent(this, modifyType, modifySupport); } protected void fireModifyEvent(Object affectObject, int modifyType, Object modifySupport) { DocumentEvent event = new DocumentModifiedEvent(this, new DocModifiedContent(affectObject, modifyType, modifySupport)); fireEvent(event); } protected void fireEvent(DocumentEvent event) { if (listeners == null) return; if (isSilentMode()) addEventToCache(event); else fireEventHelper(event); } private void fireEventHelper(DocumentEvent event) { assert listeners != null; for (Iterator i = listeners.iterator(); i.hasNext(); ) { DocumentListener listener = (DocumentListener) i.next(); listener.actionPerformed(event); } } protected void addEventToCache(DocumentEvent event) { if (cachedEvents == null) cachedEvents = new Hashtable(); cachedEvents.put(event, event); } protected void removeAllListeners() { try { for (Iterator i = listeners.iterator(); i.hasNext(); ) { DocumentListener listener = (DocumentListener) i.next(); listener.actionPerformed(DOC_DETACHED_EVENT); } } finally { listeners = null; } } public void resetState() { setModified(false); } protected boolean checkModified(Object value1, Object value2) { return !value1.equals(value2); } protected boolean checkModified(String value1, String value2) { return !value1.equals(value2); } protected boolean checkModified(long value1, long value2) { return value1 != value2; } protected boolean checkModified(boolean value1, boolean value2) { return value1 != value2; } public abstract String getName();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -