• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JTextFieldの表示領域をJScrollBarでスクロールする
#navi(../)
#tags(JTextField, JScrollBar, BoundedRangeModel)
RIGHT:Posted by &author(aterai); at 2014-05-12
* JTextFieldの表示領域をJScrollBarでスクロールする [#ac86776b]
`JTextField`の表示領域を`JScrollBar`でスクロール可能にします。

#download
#ref(https://lh3.googleusercontent.com/-cOeCI-IblNs/U2-HtWna-xI/AAAAAAAACFI/z53K4Pkgpfo/s800/HorizontalVisibility.png)

** サンプルコード [#e0731aeb]
#code(link){{
scroller.setModel(textField.getHorizontalVisibility());
}}

** 解説 [#sb017c03]
上記のサンプルでは、`JTextField#getHorizontalVisibility()`で取得した`BoundedRangeModel`(可視領域のモデル)を`JScrollBar`に設定することで、これを使用したスクロールや現在の可視領域の位置、幅の表示などが可能になっています。

- 注: ノブの表示
-- 文字列をすべて削除するなどしても、ノブが非表示にならない
- 注: `setCaretPosition: 0`
-- `JTextField#setCaretPosition(0);`は`JTextField`にフォーカスが無い場合無効?
-- `JScrollBar`が同期しない場合がある
- 注: `setScrollOffset: 0`
-- `JScrollBar`のノブがマウスドラッグに反応しなくなる場合がある?

----
- `JScrollPane scroll = new JScrollPane(new JTextField(TEXT), ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);`
-- 縦スクロールバーを非表示にした`JScrollPane`を使用する場合、`JTextField`内の文字列選択でスクロールしない
-- 文字列を適当な長さまで削除するとノブが非表示になる

//** 参考リンク
** コメント [#r73c1367]
- 可視領域の幅の表示を考えると`ArrowButton`は不要なので、[[JLabelとIconで作成した検索位置表示バーをマウスで操作する>Swing/BoundedRangeModel]]のような外見の`ScrollBar`を使用した方が良いかもしれない。 -- [[aterai]] &new{2014-05-14 (水) 16:05:32};

#comment