Wednesday Oct 02, 2013

Thanks JavaFX: WYSIWYG HTML Editor for NetBeans IDE

In this very short screencast (a mere 44 seconds), you see one of my personal holy grails has come along quite far. It shows an initial implementation of integration between the JavaFX HTMLEditor component and the NetBeans IDE HTML Source Editor. Two way editing, synchronized between the two views (visual and source) is successfully demonstrated.

https://www.youtube.com/watch?v=BLkuQFUaI9A

However, rather than rewriting the entire source file when a change is made in the JavaFX HTMLEditor, which is what currently happens, and which explains the slight delay when switching to the source view, it would be better if only the change were to be written into the file. That's the next step in this integration and probably the most challenging one.

The key pieces of this solution, following on from my blog entry from yesterday, where "obj" is the FileObject that the MultiViewElement is viewing to the user:

@Override
public void componentDeactivated() {
    FileLock fileLock = null;
    OutputStreamWriter osw;
    try {
        fileLock = obj.lock();
        OutputStream fout = obj.getOutputStream(fileLock);
        OutputStream bout = new BufferedOutputStream(fout);
        osw = new OutputStreamWriter(bout, "UTF-8");
        osw.write(htmlEditor.getHtmlText());
        osw.flush();
        osw.close();
    } catch (IOException ex) {
    } finally {
        if (fileLock != null) {
            fileLock.releaseLock();
        }
    }
}

The above writes the current content of the JavaFX HTMLEditor into the file when the user switches to the source view.

In addition, I have implemented org.openide.filesystems.FileChangeListener on the MultiViewElement, with this implementation of fileChanged:

@Override
public void fileChanged(final FileEvent fe) {
    Platform.runLater(new Runnable() {
        @Override
        public void run() {
            try {
                htmlEditor.setHtmlText(fe.getFile().asText());
            } catch (IOException ex) {
            }
        }
    });
}
About

Geertjan Wielenga (@geertjanw) is a Principal Product Manager in the Oracle Developer Tools group living & working in Amsterdam. He is a Java technology enthusiast, evangelist, trainer, speaker, and writer. He blogs here daily.

The focus of this blog is mostly on NetBeans (a development tool primarily for Java programmers), with an occasional reference to NetBeans, and sometimes diverging to topics relating to NetBeans. And then there are days when NetBeans is mentioned, just for a change.

Search

Archives
« October 2013 »
SunMonTueWedThuFriSat
  
5
6
  
       
Today