Discussion:
JTextPane.modelToView() exception
(too old to reply)
Fred Kleinschmidt
2013-02-22 21:52:23 UTC
Permalink
I am getting a BadLocationException from a call to textpane.modelToView()
when the position I pass should be legal.

I create a JTextPane and get its document:
JTextPane jtp = new JTextPane();
Document doc = jtp.getDocument();
Then I add a document listener to the document.

This is inside a DocumentListener's insertUpdate() method:
public void insertUpdate( DocumentEvent event ) {
Document doc = event.getDocument();
int len = doc.getLength();
if ( len > 0 ) {
try {
Rectangle view = jtp.modelToView(len-1);
// do other things here
} catch (Exception e) {
e.printStackTrace();
}
}
}

Everything is fine until I enter the first character after a newline.
Then I get a BadLocationException: Position not represented by view
(I am using Java 1.6, on a Windows 7 platform)
Knute Johnson
2013-02-22 23:33:28 UTC
Permalink
Post by Fred Kleinschmidt
I am getting a BadLocationException from a call to textpane.modelToView()
when the position I pass should be legal.
JTextPane jtp = new JTextPane();
Document doc = jtp.getDocument();
Then I add a document listener to the document.
public void insertUpdate( DocumentEvent event ) {
Document doc = event.getDocument();
int len = doc.getLength();
if ( len > 0 ) {
try {
Rectangle view = jtp.modelToView(len-1);
// do other things here
} catch (Exception e) {
e.printStackTrace();
}
}
}
Everything is fine until I enter the first character after a newline.
Then I get a BadLocationException: Position not represented by view
(I am using Java 1.6, on a Windows 7 platform)
An SSCCE would have been really nice here. But I think the behavior you
are seeing is normal. I'm curious as to what you are really trying to
do with the result of the JTextComponent.modelToView() call? Best I can
tell the purpose of that method is to facilitate cursors.

knute...
Fred Kleinschmidt
2013-02-25 15:48:26 UTC
Permalink
On 2/22/2013 13:52, Fred Kleinschmidt wrote: > I am getting a BadLocationException from a call to textpane.modelToView() > when the position I pass should be legal. > > I create a JTextPane and get its document: > JTextPane jtp = new JTextPane(); > Document doc = jtp.getDocument(); > Then I add a document listener to the document. > > This is inside a DocumentListener's insertUpdate() method: > public void insertUpdate( DocumentEvent event ) { > Document doc = event.getDocument(); > int len = doc.getLength(); > if ( len > 0 ) { > try { > Rectangle view = jtp.modelToView(len-1); > // do other things here > } catch (Exception e) { > e.printStackTrace(); > } > } > } > > Everything is fine until I enter the first character after a newline. > Then I get a BadLocationException: Position not represented by view > (I am using Java 1.6, on a Windows 7 platform) > An SSCCE would have been really nice here. But I think the behavior you are seeing is normal. I'm curious as to what you are really trying to do with the result of the JTextComponent.modelToView() call? Best I can tell the purpose of that method is to facilitate cursors. knute...
I'm trying to track the screen position of each newline so that I can
keep text in an adjacent text pane aligned with this text pane. It the
text in the main pane wraps dut to the user changing the window size,
I want the text in the adjacent pane to wrap, too.

The main pane is the output area of an executed command; the adjacent
pane (on the left, in this instance) contains the prompts.
So this is similar to an Xterm except that the prompts are not
displayed in the same text area as the output (this facilitates
cut/paste from the output area without grabbing the prompts).
Fred...
Knute Johnson
2013-02-25 17:08:38 UTC
Permalink
Post by Fred Kleinschmidt
On 2/22/2013 13:52, Fred Kleinschmidt wrote: > I am getting a BadLocationException from a call to textpane.modelToView() > when the position I pass should be legal. > > I create a JTextPane and get its document: > JTextPane jtp = new JTextPane(); > Document doc = jtp.getDocument(); > Then I add a document listener to the document. > > This is inside a DocumentListener's insertUpdate() method: > public void insertUpdate( DocumentEvent event ) { > Document doc = event.getDocument(); > int len = doc.getLength(); > if ( len > 0 ) { > try { > Rectangle view = jtp.modelToView(len-1); > // do other things here > } catch (Exception e) { > e.printStackTrace(); > } > } > } > > Everything is fine until I enter the first character after a newline. > Then I get a BadLocationException: Position not represented by view > (I am using Java 1.6, on a Windows 7 platform) > An SSCCE would have been really nice here. But I think the behavior you are seeing is normal. I'm curious as to what you are re
ally trying to do with the result of the JTextComponent.modelToView() call? Best I can tell the purpose of that method is to facilitate cursors. knute...
Post by Fred Kleinschmidt
I'm trying to track the screen position of each newline so that I can
keep text in an adjacent text pane aligned with this text pane. It the
text in the main pane wraps dut to the user changing the window size,
I want the text in the adjacent pane to wrap, too.
The main pane is the output area of an executed command; the adjacent
pane (on the left, in this instance) contains the prompts.
So this is similar to an Xterm except that the prompts are not
displayed in the same text area as the output (this facilitates
cut/paste from the output area without grabbing the prompts).
Fred...
I think I understand what you are trying to do but I don't know how to
do it. I looked through the docs a little bit but I'm not finding
anything that looks promising. The only thought I did have was to
design a new component where you write to half of it as the input side
and the other half as the output side. You would have to do your own
line wrap that way but it might be doable.

Sorry I wasn't more help.
--
Knute Johnson
Loading...