• 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: https://lh4.googleusercontent.com/-EN1vcmWX7Gs/UwDyGP5n91I/AAAAAAAACAE/tb9w7pHxtk8/s800/BoundedRangeModel.png

概要

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 in GitHub: Java, Kotlin

解説

  • Iconに検索結果をハイライト表示しJLabelに設定
    • このJLabelJScrollPaneの子コンポーネントではないので縦JScrollBarBoundedRangeModelChangeListenerを追加して更新ごとにJLabel#repaint()もあわせて実行する必要がある
  • JLabel上の表示範囲をマウスで操作可能にするためMouseListenerなどを追加
    • 位置はJScrollBarからBoundedRangeModelを取得して計算する

参考リンク

コメント