Swing/SliderToolTips のバックアップ差分(No.2)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/SliderToolTips へ行く。
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JSliderのノブをドラッグ中にToolTipで値を表示 #navi(../) #tags(JSlider, JWindow, JToolTip) RIGHT:Posted by &author(aterai); at 2012-12-17 *JSliderのノブをドラッグ中にToolTipで値を表示 [#v7c49d3e] ``JSlider``のノブをドラッグ中に``ToolTip``でその現在値を表示します。 --- title: JSliderのノブをドラッグ中にToolTipで値を表示 tags: [JSlider, JWindow, JToolTip] author: aterai pubdate: 2012-12-17T00:06:15+09:00 description: JSliderのノブをドラッグ中にToolTipでその現在値を表示します。 --- * 概要 [#v7c49d3e] `JSlider`のノブをドラッグ中に`ToolTip`でその現在値を表示します。 -&jnlp; -&jar; -&zip; #download(https://lh6.googleusercontent.com/-RBRHhAqSA3A/UM3gOvnmIOI/AAAAAAAABZM/LdLir_Y4dQc/s800/SliderToolTips.png) //#screenshot #ref(https://lh6.googleusercontent.com/-RBRHhAqSA3A/UM3gOvnmIOI/AAAAAAAABZM/LdLir_Y4dQc/s800/SliderToolTips.png) **サンプルコード [#d5baebf6] * サンプルコード [#d5baebf6] #code(link){{ class SliderPopupListener extends MouseAdapter{ private final JWindow toolTip = new JWindow(); private final JLabel label = new JLabel("", SwingConstants.CENTER); private final Dimension size = new Dimension(30, 20); public SliderPopupListener() { label.setOpaque(false); label.setBackground(UIManager.getColor("ToolTip.background")); label.setBorder(UIManager.getBorder("ToolTip.border")); toolTip.add(label); toolTip.setSize(size); } private int prevValue = -1; protected void updateToolTip(MouseEvent me) { JSlider slider = (JSlider)me.getSource(); int intValue = (int)slider.getValue(); if(prevValue!=intValue) { label.setText(String.format("%03d", slider.getValue())); Point pt = me.getPoint(); pt.y = -size.height; SwingUtilities.convertPointToScreen(pt, (Component)me.getSource()); pt.translate(-size.width/2, 0); toolTip.setLocation(pt); } prevValue = intValue; } @Override public void mouseDragged(MouseEvent me) { updateToolTip(me); } @Override public void mousePressed(MouseEvent me) { toolTip.setVisible(true); updateToolTip(me); } @Override public void mouseReleased(MouseEvent me) { toolTip.setVisible(false); } } }} **解説 [#d1ef2e47] 上記のサンプルでは、ドラッグ中だけ``ToolTip``で値を表示したいので、``JToolTip``ではなくその背景色などが同じになるように設定した``JWindow``を使用しています。 * 解説 [#d1ef2e47] 上記のサンプルでは、ドラッグ中だけ`ToolTip`で値を表示したいので、`JToolTip`ではなくその背景色などが同じになるように設定した`JWindow`を使用しています。 - ``MouseListener`` -- ``JWindow``の表示非表示の切り替え - ``MouseMotionListener`` -- ``JSlider``が指す値と``JWindow``の位置(中心がマウスカーソルのx座標、``JWindow``の下端が``JSlider``の上端)の更新 - `MouseListener` -- `JWindow`の表示非表示の切り替え - `MouseMotionListener` -- `JSlider`が指す値と`JWindow`の位置(中心がマウスカーソルの`x`座標、`JWindow`の下端が`JSlider`の上端)の更新 ---- - デフォルトの``JSlider``では、ノブ以外の位置をクリックすると段階的に位置が変化するため、上記の``MouseListener``を使用するとマウスカーソルの位置とノブの表示位置がずれる - デフォルトの`JSlider`では、ノブ以外の位置をクリックすると段階的に位置が変化するため、上記の`MouseListener`を使用するとマウスカーソルの位置とノブの表示位置がずれる - [[JSliderでクリックした位置にノブをスライド>Swing/JumpToClickedPositionSlider]]を使用して、クリック直後にその位置にノブ移動するように設定 - ``JSlider.VERTICAL``には未対応 - `JSlider.VERTICAL`には未対応 **参考リンク [#bd488b1d] * 参考リンク [#bd488b1d] - [[JSliderでクリックした位置にノブをスライド>Swing/JumpToClickedPositionSlider]] - [[JToolTipの表示位置>Swing/ToolTipLocation]] **コメント [#ze6cb470] * コメント [#ze6cb470] #comment #comment