DevFaqListenEditorChanges

(Difference between revisions)
(How can I track what file the user is currently editing?: NbDocument.findRecentEditorPane)
 
(4 intermediate revisions not shown)
Line 2: Line 2:
===How can I track what file the user is currently editing?===
===How can I track what file the user is currently editing?===
-
The editor keeps a registry of open editors;  you can track changes in which editor is active using this method: <tt>org.netbeans.api.editor.EditorRegistry.addPropertyChangeListener(myListener);</tt>.  If you attach any listeners to the <tt>Document</tt> or anything else in the active editor text component, remember to remove them when the active editor changes.
+
====EditorRegistry====
 +
The editor keeps a registry of open editors;  you can track the active editor using the following code:
-
==DataObject Registry Listening - Sample code==
 
<pre>
<pre>
-
DataObject.Registry registries = DataObject.getRegistry();
+
import org.netbeans.api.editor.EditorRegistry;
-
registries.addChangeListener(new ChangeListener() {
+
 
-
    public void stateChanged(ChangeEvent e) {
+
PropertyChangeListener l = new PropertyChangeListener() {
-
        System.out.println("ChangedListener: o = " + e.getSource().getClass());
+
  public void propertyChange(PropertyChangeEvent evt) {
-
        System.out.println("ChangedListener: o.source = " + e.getSource());
+
    JTextComponent jtc = EditorRegistry.lastFocusedComponent();
 +
    if (jtc != null) {
 +
      Document d = jtc.getDocument();
 +
      // use the document
     }
     }
-
});
+
  }
-
DataObject[] objects = registries.getModified();
+
};
-
for (int i = 0; i < objects.length; i++) {
+
 
-
    DataObject dataObj = objects[I];
+
EditorRegistry.addPropertyChangeListener(l);
-
    System.out.println("data object name = " + dataObj.getName());
+
-
    System.out.println("data object pimary file name = " + dataObj.getPrimaryFile().getName());
+
-
    Set fss = dataObj.files();
+
-
    Iterator iter = fss.iterator();
+
-
    while (iter.hasNext()) {
+
-
        FileObject fo = (FileObject) iter.next();
+
-
        System.out.println("\tset file object: " + fo.getName());
+
-
    }
+
-
}
+
</pre>
</pre>
-
==Libraries needed==
+
'''IMPORTANT''': If you attach any listener to the <tt>Document</tt> or anything else in the active editor text component, remember to remove them when the active editor changes.
-
* Datasystems API
+
 
-
* File System API
+
Please read javadoc on <tt>EditorRegistry</tt> to see details about the properties delivered through the listener used in the above code. There are many property changes fired and if an event comes it does '''not''' necessarily mean that the active editor has changed.
-
* Nodes API
+
 
-
* Utilities API
+
 
 +
====NbDocument.findRecentEditorPane====
 +
If you have a <code>EditorCookie</code> you can use <code>NbDocument.findRecentEditorPane</code>
 +
 
 +
http://bits.netbeans.org/dev/javadoc/org-openide-text/org/openide/text/NbDocument.html#findRecentEditorPane-org.openide.cookies.EditorCookie-
 +
 
 +
-----
 +
 
 +
Applies to: Netbeans 6.x and later
 +
 
 +
Platforms: All

Current revision as of 22:27, 22 February 2016

How can I track what file the user is currently editing?

EditorRegistry

The editor keeps a registry of open editors; you can track the active editor using the following code:

import org.netbeans.api.editor.EditorRegistry;

PropertyChangeListener l = new PropertyChangeListener() {
  public void propertyChange(PropertyChangeEvent evt) {
    JTextComponent jtc = EditorRegistry.lastFocusedComponent();
    if (jtc != null) {
      Document d = jtc.getDocument();
      // use the document
    }
  }
};

EditorRegistry.addPropertyChangeListener(l);

IMPORTANT: If you attach any listener to the Document or anything else in the active editor text component, remember to remove them when the active editor changes.

Please read javadoc on EditorRegistry to see details about the properties delivered through the listener used in the above code. There are many property changes fired and if an event comes it does not necessarily mean that the active editor has changed.


NbDocument.findRecentEditorPane

If you have a EditorCookie you can use NbDocument.findRecentEditorPane

http://bits.netbeans.org/dev/javadoc/org-openide-text/org/openide/text/NbDocument.html#findRecentEditorPane-org.openide.cookies.EditorCookie-


Applies to: Netbeans 6.x and later

Platforms: All

Not logged in. Log in, Register

By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2012, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo