Swing/ToolTipIcon のバックアップの現在との差分(No.5)
TITLE:JToolTipにアイコンを表示
JToolTipにアイコンを表示
編集者:Terai Atsuhiro~
作成日:2006-02-13
更新日:2022-08-18 (木) 02:50:19
概要
JToolTip
にJLabel
、MatteBorder
、またはHtml
タグを使用してアイコンを表示する方法をテストします。
Screenshot
Advertisement
概要
JToolTipにアイコンを表示します。サンプルコード
#spanend
#spanadd
JLabel l1 = new JLabel("Icon") {
#spanend
@Override public JToolTip createToolTip() {
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() {
return getLayout().preferredLayoutSize(this);
}
#spandel
#screenshot
#spanend
@Override public void setTipText(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;
}
#spanadd
};
#spanend
#spanadd
l1.setToolTipText("Test1");
#spanend
#spandel
**サンプルコード [#fe5cdb35]
#spanend
JLabel l1 = new JLabel("JLabelを使ってツールチップにアイコン") {
public JToolTip createToolTip() {
JToolTip tip = super.createToolTip();
tip.setLayout(new BorderLayout());
JLabel iconlabel = new JLabel("テスト", icon, SwingConstants.LEFT);
iconlabel.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
tip.add(iconlabel, BorderLayout.CENTER);
Insets i = tip.getInsets();
Dimension d = iconlabel.getPreferredSize();
int w = d.width+i.left+i.right;
int h = d.height+i.top+i.bottom;
tip.setPreferredSize(new Dimension(w,h));
return tip;
}
}; l1.setToolTipText("");
JLabel l2 = new JLabel("MatteBorderでツールチップにアイコン") {
public JToolTip createToolTip() {
JToolTip tip = super.createToolTip();
Dimension d = tip.getPreferredSize();
int strw = SwingUtilities.computeStringWidth(
tip.getFontMetrics(tip.getFont()), "テスト");
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));
Insets i = tip.getInsets();
int w = strw+i.left+i.right+3; // 3?
int h = Math.max(d.height, icon.getIconHeight()+i.top+i.bottom);
tip.setPreferredSize(new Dimension(w,h));
return tip;
}
}; l2.setToolTipText("テスト");
JLabel l3 = new JLabel("htmlタグでツールチップにアイコン");
l3.setToolTipText("<html><img src='"+url+"'>テスト</img></html>");
#spanadd
JLabel l2 = new JLabel("MatteBorder") {
#spanend
@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;
}
#spanadd
};
#spanend
#spanadd
l2.setToolTipText("Test2");
#spanend
-&jnlp;
-&jar;
-&zip;
#spanadd
JLabel l3 = new JLabel("html");
#spanend
#spanadd
l3.setToolTipText("<html><img src='" + url + "'>test</img></html>");
#spanend
#spanadd
View in GitHub: Java, Kotlin解説
- 上ラベル
- JToolTipにJLabelを追加しています。
- 中ラベル
- MatteBorderを使ってアイコンを表示するように、createToolTipメソッドをオーバライドしています。
- 下ラベル
- htmlのimgタグをsetToolTipTextメソッドに使ってアイコンを表示しています。
解説
- 上:
ToolTip icon using JLabel
-
JToolTip
にアイコンを設定したJLabel
を追加
-
- 中:
ToolTip icon using MatteBorder
- アイコンを表示する
MatteBorder
をJToolTip
に設定するようcreateToolTip
メソッドをオーバーライド
- アイコンを表示する
- 下:
ToolTip icon using HTML tags
-
<html>
のimg
タグをsetToolTipText
メソッドに使用してアイコンを表示
-
参考リンク
参考リンク
コメント
- MatteBorderを使うと1.4と1.5で表示が微妙に異なるようです。 -- terai
- JLabelをJToolTipに貼る方法を追加しました。 -- terai
- 「MatteBorderでツールチップにアイコン」で、MatteBorderとEmptyBorderの内外が反対になっていたのを修正しました。 -- terai
コメント
-
MatteBorder
を使うとJava 1.4
と1.5
で表示が微妙に異なるようです。 -- aterai -
JLabel
をJToolTip
内に設定する方法を追加しました。 -- aterai - 「
MatteBorder
でツールチップにアイコン」で、MatteBorder
とEmptyBorder
の内外が反対になっていたのを修正しました。 -- aterai