TITLE:JToolTipにアイコンを表示

Posted by at 2006-02-13

JToolTipにアイコンを表示

`JToolTip`にアイコンを表示します。

  • &jnlp;
  • &jar;
  • &zip;
ToolTipIcon.png

サンプルコード

JLabel l1 = new JLabel("JLabelを使ってツールチップにアイコン") {
  @Override public JToolTip createToolTip() {
    final JLabel iconlabel = new JLabel(icon);
    iconlabel.setBorder(BorderFactory.createEmptyBorder(1,1,1,1));
    LookAndFeel.installColorsAndFont(
        iconlabel, "ToolTip.background", "ToolTip.foreground", "ToolTip.font");
    JToolTip tip = new JToolTip() {
      @Override public Dimension getPreferredSize() {
        //http://forums.oracle.com/forums/thread.jspa?threadID=2197222
        return getLayout().preferredLayoutSize(this);
      }
      @Override public void setTipText(final String tipText) {
        String oldValue = iconlabel.getText();
        iconlabel.setText(tipText);
        firePropertyChange("tiptext", oldValue, tipText);
      }
    };
    tip.setComponent(this);
    tip.setLayout(new BorderLayout());
    tip.add(iconlabel);
    return tip;
  }
};
l1.setToolTipText("Test1");
View in GitHub: Java, Kotlin
JLabel l2 = new JLabel("MatteBorderでツールチップにアイコン") {
  @Override public JToolTip createToolTip() {
    JToolTip tip = new JToolTip() {
      @Override public Dimension getPreferredSize() {
        Dimension d = super.getPreferredSize();
        Insets i = getInsets();
        d.height = Math.max(d.height, icon.getIconHeight()+i.top+i.bottom);
        return d;
      }
    };
    tip.setComponent(this);
    Border b1 = tip.getBorder();
    Border b2 = BorderFactory.createMatteBorder(0, icon.getIconWidth(), 0, 0, icon);
    Border b3 = BorderFactory.createEmptyBorder(1,1,1,1);
    Border b4 = BorderFactory.createCompoundBorder(b3, b2);
    tip.setBorder(BorderFactory.createCompoundBorder(b1, b4));
    return tip;
  }
};
l2.setToolTipText("Test2");
JLabel l3 = new JLabel("htmlタグでツールチップにアイコン");
l3.setToolTipText("<html><img src='"+url+"'>テスト</img></html>");

解説

  • 上ラベル
    • `JToolTipJLabel`を追加しています。
  • 中ラベル
    • `MatteBorderを使ってアイコンを表示するように、createToolTip`メソッドをオーバーライドしています。
  • 下ラベル
    • `htmlimgタグをsetToolTipText`メソッドに使ってアイコンを表示しています。

参考リンク

コメント

  • `MatteBorderを使うとJava 1.41.5`で表示が微妙に異なるようです。 -- aterai
  • `JLabelJToolTip`に貼る方法を追加しました。 -- aterai
  • 「`MatteBorderでツールチップにアイコン」で、MatteBorderEmptyBorder`の内外が反対になっていたのを修正しました。 -- aterai