• title: JToolTipの表示位置 tags: [JToolTip, JWindow, MouseListener, MouseMotionListener] author: aterai pubdate: 2010-05-03T22:32:22+09:00 description: JToolTipの表示位置がドラッグでマウスカーソルに追従するように設定します。

概要

JToolTipの表示位置がドラッグでマウスカーソルに追従するように設定します。

サンプルコード

@Override public void mouseDragged(MouseEvent e) {
  JComponent c = (JComponent) e.getSource();
  Point p = getToolTipLocation(e);
  if (SwingUtilities.isLeftMouseButton(e)) {
    tip.setTipText(String.format("Window(x, y)=(%d, %d)", p.x, p.y));
    //window.pack();
    window.setLocation(p);
  } else {
    if (popup != null) {
      popup.hide();
    }
    tip.setTipText(String.format("Popup(x, y)=(%d, %d)", p.x, p.y));
    popup = factory.getPopup(c, tip, p.x, p.y);
    popup.show();
  }
}
View in GitHub: Java, Kotlin

解説

  • 左クリックしてドラッグ
    • JWindowに、JToolTipを追加して、Window#setLocation()で移動
    • テキスト文字数が変更された場合のみ、JWindow#pack()を呼び出してサイズを更新
  • 左クリック以外でドラッグ
    • PopupFactory#getPopup()で座標を指定した、Popupを取得し表示
    • Popupの位置は変更できず再作成しているため、すこしちらつく

参考リンク

コメント