JLabelとIconで作成した検索位置表示バーをマウスで操作する
Total: 3923
, Today: 4
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
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);
}
@Override public void mousePressed(MouseEvent e) {
processMouseEvent(e);
}
@Override public void mouseDragged(MouseEvent e) {
processMouseEvent(e);
}
}
View in GitHub: Java, Kotlin解説
Icon
に検索結果をハイライト表示しJLabel#setIcon(...)
で設定- この
JLabel
はJScrollPane
の子コンポーネントではないので縦JScrollBar
のBoundedRangeModel
にChangeListener
を追加して更新ごとにJLabel#repaint()
を実行して再描画する必要がある
- この
JLabel
上の表示範囲をマウスで操作可能にするためMouseListener
などを追加- 位置は
JScrollBar
からBoundedRangeModel
を取得して計算する
- 位置は