Swing/ToolTipLocation のバックアップ(No.9)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ToolTipLocation へ行く。
- 1 (2010-05-03 (月) 22:32:22)
- 2 (2013-01-01 (火) 16:35:11)
- 3 (2015-01-01 (木) 21:37:39)
- 4 (2016-04-28 (木) 15:19:57)
- 5 (2016-04-29 (金) 01:15:32)
- 6 (2016-05-25 (水) 13:00:51)
- 7 (2017-03-29 (水) 19:52:46)
- 8 (2018-02-16 (金) 19:54:30)
- 9 (2020-02-14 (金) 16:19:08)
- 10 (2021-07-30 (金) 04:23:56)
- 11 (2025-01-03 (金) 08:57:02)
- 12 (2025-01-03 (金) 09:01:23)
- 13 (2025-01-03 (金) 09:02:38)
- 14 (2025-01-03 (金) 09:03:21)
- 15 (2025-01-03 (金) 09:04:02)
- category: swing
folder: ToolTipLocation
title: JToolTipの表示位置
tags: [JToolTip, JWindow, MouseListener, MouseMotionListener]
author: aterai
pubdate: 2010-05-03T22:32:22+09:00
description: JToolTipの表示位置がドラッグでマウスカーソルに追従するように設定します。
image:
概要
JToolTip
の表示位置がドラッグでマウスカーソルに追従するように設定します。
Screenshot

Advertisement
サンプルコード
private void updateTipText(MouseEvent e) {
Point pt = e.getPoint();
String txt = String.format("Window(x, y)=(%d, %d)", pt.x, pt.y);
tip.setTipText(txt);
Point p = getToolTipLocation(e);
if (SwingUtilities.isLeftMouseButton(e)) {
if (prev.length() != txt.length()) {
window.pack();
}
window.setLocation(p);
window.setAlwaysOnTop(true);
} else {
if (popup != null) {
popup.hide();
}
popup = factory.getPopup(e.getComponent(), tip, p.x, p.y);
Container c = tip.getTopLevelAncestor();
if (c instanceof JWindow &&
((JWindow) c).getType() == Window.Type.POPUP) {
System.out.println("Popup$HeavyWeightWindow");
} else {
popup.show();
}
}
prev = txt;
}
View in GitHub: Java, Kotlin解説
- 左クリックしてドラッグ
JWindow
に、JToolTip
を追加して、Window#setLocation()
で移動- テキスト文字数が変更された場合のみ、
JWindow#pack()
を呼び出してサイズを更新
- 左クリック以外でドラッグ
PopupFactory#getPopup()
で座標を指定した、Popup
を取得し表示Popup
の位置が変更できずこれを再作成しているため、親フレームの外にJToolTip
が表示される場合は非表示に設定- フレーム外では
HeavyWeight
のJWindow
でJToolTip
が表示されるため、再作成すると表示がチラついてしまう
- フレーム外では