Swing/ToolTipLocation のバックアップの現在との差分(No.1)
TITLE:JToolTipの表示位置
Posted by terai at 2010-05-03
JToolTipの表示位置
JToolTipの表示位置がマウスのドラッグに追従するように設定します。- 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
の表示位置がドラッグでマウスカーソルに追従するように設定します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
#screenshot
サンプルコード
#spanend
#spandel
@Override public void mouseDragged(MouseEvent me) {
#spanend
JComponent c = (JComponent)me.getSource();
Point p = me.getPoint();
if(SwingUtilities.isLeftMouseButton(me)) {
tip.setTipText(String.format("Window(x,y)=(%4d,%4d)", p.x, p.y));
//tip.revalidate();
tip.repaint();
//window.pack();
window.setLocation(getToolTipLocation(me));
}else{
if(popup!=null) popup.hide();
tip.setTipText(String.format("Popup(x,y)=(%d,%d)", p.x, p.y));
p = getToolTipLocation(me);
popup = factory.getPopup(c, tip, p.x, p.y);
popup.show();
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
#spanadd
private void updateTipText(MouseEvent e) {
#spanend
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;
}
解説
- 左クリックしてドラッグ
- JWindowに、JToolTipを追加して、Window#setLocation()で移動
- 左クリック以外でドラッグ
- PopupFactory#getPopup()で座標を指定した、Popupを取得し表示
解説
- 左クリックしてドラッグ
-
JWindow
にJToolTip
を追加してWindow#setLocation()
メソッドで移動 - テキスト文字数が変更された場合のみ
JWindow#pack()
メソッドを呼び出してサイズを更新
-
- 左クリック以外でドラッグ
-
PopupFactory#getPopup()
でPopup
を取得して表示 -
Popup
の位置が変更できずこれを再作成しているため、親フレームの外にJToolTip
が表示される場合は非表示に設定- フレーム外では
HeavyWeight
のJWindow
でJToolTip
が表示されるため、再作成すると表示がチラついてしまう
- フレーム外では
-