0
JTextPane タブサイズの設定について。
テキストエディターでキャレットの位置を取得してそこの行番号を表示さようとしてJTextPaneにCaretistenerを付けています。
JTextPaneのデフォルトのタブサイズでは大きすぎるので変更したいと思い、以下のサイトを見つけました。
JTextPaneにタブサイズを設定するには|普通に仕事しながら趣味でソフト開発する37歳いろいろメモ
http://ameblo.jp/ogitsu-hama/entry-10066055266.html
そこに書いてある以下のコードでタブサイズを設定できることはわかりました。
int tabSize=5; //設定したいタブサイズ(文字数)
FontMetrics fm = jtextPane.getFontMetrics(textPane.getFont());
int charWidth = fm.charWidth('m');
int tabLength = charWidth * tabSize;
TabStop[] tabs = new TabStop[10];
for(int j=0;j<tabs.length;j++) {
tabs[j] = new TabStop((j+1)*tabLength);
}
TabSet tabSet = new TabSet(tabs);
SimpleAttributeSet attrs = new SimpleAttributeSet();
StyleConstants.setTabSet(attrs, tabSet);
jtextPane.getStyledDocument().setParagraphAttributes(0,
jtextPane.getDocument().getLength(), attrs, false);
TabStopクラスでピクセル単位でタブサイズを設定するのだと思ったのですが、なぜTabStopの配列を作るのか、なぜtabLengthではなく(j+1)*tabLengthに設定するのか、なぜその配列をTabSetクラスに渡しているのかが分かりません。
できればこれらについて使う前に理解したいと思ったので質問させてもらいました。
TabSet型にしているのはStyleConstants.setTabSetの引数の型に合わせるため(だけってわけではないでしょうけども)だと思いますが、そのTadSetクラスがよくわかりません。
ドキュメントに以下のように書いてありましたが、どういうことなのかよくわかりませんでした。
「タブセットは、多くのタブストップで構成されます。タブセットは、指定された位置にもっとも近いタブストップを見つけたり、すべての潜在的なタブストップを検索したりするメソッドを提供します。タブセットは変更できません。 」