概要

JScrollBarからBoundedRangeModelを取得し、JLabelIconで表示した検索位置表示バーをマウスで操作可能にします。

サンプルコード

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 all

解説

  • Iconに検索結果をハイライト表示し、JLabelに設定
    • このJLabelは、JScrollPaneの子コンポーネントではないので、縦JScrollBarBoundedRangeModelChangeListenerを追加して、更新ごとにJLabelrepaint
  • JLabel上の表示範囲をマウスで操作可能にするため、MouseListenerなどを追加
    • 位置はJScrollBarからBoundedRangeModelを取得して計算

参考リンク

コメント