0
JTextPane スクロールされずに行数表示を更新したい。
Java - エディタを作る
http://abebas.sub.jp/java/JavaPrograming/01_Editor/005.html
を参考にエディターのJTextPaneの隣に行数表示のJTextPaneを置いて、setLinePane改めsetLineNoメソッドを呼び出して行数を表示させています。
とりあえずEnterなどが押されるなどして行数が変化したときにsetLineNoで行数を表示しなおす方法を考えていて、以下のようにEnterやBack Spaceが押されたときに呼び出されるようにしてみました。
@Override
public void keyReleased(KeyEvent event){
if(event.getKeyCode()==KeyEvent.VK_ENTER){
setLineNo();
}
else if(event.getKeyCode()==KeyEvent.VK_BACK_SPACE){ //Back Spaceの場合はPressedのときと行数が変わった時だけ
Document doc = sorce.getDocument();
no2 = doc.getDefaultRootElement().getElementIndex(doc.getLength())+1;
if(no!=no2){
setLineNo();
}
}
}
すると、たとえばEnterを押したとききちんと改行はされていますが、行表示の更新のためにスクロールが一番下へ行ってしまいます。
前とっかえじゃなくて以下のように最後に追記という手法にしてみても変わりませんでした。
Document doc = sorce.getDocument();
int maxLine = doc.getDefaultRootElement().getElementIndex(doc.getLength())+1;
pane.setDividerLocation((""+maxLine).length()*10);
doc = line.getDocument();;
SimpleAttributeSet attr = new SimpleAttributeSet();
attr.addAttribute(StyleConstants.Foreground,new Color(100,100,255));
try{
doc.insertString(doc.getLength(), maxLine+"\n", attr);
} catch (BadLocationException e) {
e.printStackTrace();
}
どのようにすればスクロールされずに行数表示を更新させることができるでしょうか?