Swing/BoundedRangeModel のバックアップの現在との差分(No.7)
- category: swing folder: BoundedRangeModel title: JLabelとIconで作成した検索位置表示バーをマウスで操作する tags: [JLabel, Icon, BoundedRangeModel, JScrollBar, JTable] author: aterai pubdate: 2014-02-17T02:41:10+09:00 description: JScrollBarからBoundedRangeModelを取得し、JLabelとIconで表示した検索位置表示バーをマウスで操作可能にします。 image:
概要
JScrollBar
からBoundedRangeModel
を取得し、JLabel
とIcon
で表示した検索位置表示バーをマウスで操作可能にします。
Screenshot
Advertisement
サンプルコード
class HighlightBarHandler extends MouseAdapter {
private void processMouseEvent(MouseEvent e) {
Point pt = e.getPoint();
Component c = e.getComponent();
BoundedRangeModel m = scrollbar.getModel();
int h = m.getMaximum() - m.getMinimum();
int iv = (int) (.5 - m.getExtent() * .5 + pt.y * h / (double) c.getHeight());
m.setValue(iv);
}
#spanadd
#spanend
@Override public void mousePressed(MouseEvent e) {
processMouseEvent(e);
}
#spanadd
#spanend
@Override public void mouseDragged(MouseEvent e) {
processMouseEvent(e);
}
}
View in GitHub: Java, Kotlin解説
-
Icon
に検索結果をハイライト表示し、JLabel
に設定- この
JLabel
はJScrollPane
の子コンポーネントではないので、縦JScrollBar
のBoundedRangeModel
にChangeListener
を追加し、更新ごとにJLabel#repaint()
もあわせて実行する必要がある
- この
-
JLabel
上の表示範囲をマウスで操作可能にするため、MouseListener
などを追加 -
Icon
に検索結果をハイライト表示しJLabel#setIcon(...)
で設定- この
JLabel
はJScrollPane
の子コンポーネントではないので縦JScrollBar
のBoundedRangeModel
にChangeListener
を追加して更新ごとにJLabel#repaint()
を実行して再描画する必要がある
- この
-
JLabel
上の表示範囲をマウスで操作可能にするためMouseListener
などを追加- 位置は
JScrollBar
からBoundedRangeModel
を取得して計算する
- 位置は