Using a custom Document implementation with JTextArea

  • Thread starter Brian J. Sayatovic
  • Start date
B

Brian J. Sayatovic

I just made my own, optimized Document implementation for use in a
JTextArea. I optimized it to handle large amounnts of text in anappend-only
fashion. However, when I put it to use, I get a NullPointerException deep
down inside PlainView:

java.lang.NullPointerException
at javax.swing.text.PlainView.getLineWidth(Unknown Source)
at javax.swing.text.PlainView.getPreferredSpan(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI$RootView.getPreferredSpan(Unknown
Source)
at javax.swing.plaf.basic.BasicTextUI.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at javax.swing.JTextArea.getPreferredSize(Unknown Source)
at
javax.swing.text.JTextComponent.getPreferredScrollableViewportSize(Unknown
Source)
at javax.swing.JTextArea.getPreferredScrollableViewportSize(Unknown
Source)
at javax.swing.ViewportLayout.preferredLayoutSize(Unknown Source)
at java.awt.Container.preferredSize(Unknown Source)
at java.awt.Container.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
at javax.swing.ScrollPaneLayout.preferredLayoutSize(Unknown Source)
at java.awt.Container.preferredSize(Unknown Source)
at java.awt.Container.getPreferredSize(Unknown Source)
at javax.swing.JComponent.getPreferredSize(Unknown Source)
...

The problem boils down to the fact that my Document implementation initially
has no content whatsoever. Thus, the root Element, which represents the
entire Document, has no child elements. This leaves the longestLine member
inside PlainView as null, so any call utilizing it, including
getLineWidth(), will throw a NullPointerException.

Now, I read that the default Documents utilize a scheme where their Content
always has an extra character at the end to allow for the caret to be placed
at the end of the real content. I imagine this means that even an empty
PlainDocument, for example, always has at least one element representing
that single newline character used in practice.

Is it necessary to do this in my case, or is there an easy way to subclass
PlainView and force my JTextArea to use this subclass instead?

Regards,
Brian.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,020
Latest member
GenesisGai

Latest Threads

Top