6

私はそのコンテンツをその上にタイトルのある長方形にグループ化するために使用setBorder(BorderFactory.createTitledBorder(title))しています。JPanelタイトルのツールチップ テキストを設定するにはどうすればよいですか?

4

4 に答える 4

6

考えられるアプローチは、コンポーネントをネストすることです。境界線はコンポーネントではないため、ツールチップを持つことはできませんが、境界線とツールチップを保持することだけを目的としたコンポーネントを持つことができます:

JPanel outer = new JPanel();
outer.setBorder(BorderFactory.createTitledBorder("Title"));
outer.setToolTipText("sample text");
JPanel inner = new JPanel();
outer.add(inner);

innerグループ化するコンポーネントのコンテナーとして使用します。

于 2013-09-09T07:27:55.657 に答える
5

getToolTipText()パネルのメソッドをオーバーライドして、マウスがタイトル テキストの上にあるかどうかを確認できます。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class TitledBorderTest
{
    private static void createAndShowUI()
    {
        UIManager.getDefaults().put("TitledBorder.titleColor", Color.RED);
        Border lowerEtched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
        TitledBorder title = BorderFactory.createTitledBorder(lowerEtched, "Title");
//      title.setTitleJustification(TitledBorder.RIGHT);
        Font titleFont = UIManager.getFont("TitledBorder.font");
        title.setTitleFont( titleFont.deriveFont(Font.ITALIC + Font.BOLD) );

        JPanel panel = new JPanel()
        {
            @Override
            public String getToolTipText(MouseEvent e)
            {
                Border border = getBorder();

                if (border instanceof TitledBorder)
                {
                    TitledBorder tb = (TitledBorder)border;
                    FontMetrics fm = getFontMetrics( tb.getTitleFont() );
                    int titleWidth = fm.stringWidth(tb.getTitle()) + 20;
                    Rectangle bounds = new Rectangle(0, 0, titleWidth, fm.getHeight());
                    return bounds.contains(e.getPoint()) ? super.getToolTipText() : null;
                }

                return super.getToolTipText(e);
            }
        };
        panel.setBorder( title );
        panel.setToolTipText("Title With ToolTip");

        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( panel );
        frame.setSize(200, 200);
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}

このコードは、タイトルが左側にあると想定しています。右側にタイトルが必要なX場合は、テキスト境界の値を調整する必要があります。

于 2013-09-09T16:08:49.603 に答える
1
  • TollTip は適切ではありません 実験用のコンポーネント、ポップアップまたはツールチップのすべての goog 回避策は JWindow/ undecorated JDialog に基づいています

  • 必要ないかもしれませんが、UIManager のキーにアクセスできますが、この場合、すべての TollTips の設定は同じです。

ここに画像の説明を入力

import java.awt.*;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.plaf.*;

public class ColoredToolTipExample extends JFrame {

    private static final long serialVersionUID = 1L;

    public ColoredToolTipExample() {
        Border line, raisedbevel, loweredbevel, title, empty;
        line = BorderFactory.createLineBorder(Color.black);
        raisedbevel = BorderFactory.createRaisedBevelBorder();
        loweredbevel = BorderFactory.createLoweredBevelBorder();
        title = BorderFactory.createTitledBorder("");
        empty = BorderFactory.createEmptyBorder(1, 1, 1, 1);
        Border compound;
        compound = BorderFactory.createCompoundBorder(empty, line);
        UIManager.put("ToolTip.foreground", new ColorUIResource(Color.red));
        UIManager.put("ToolTip.background", new ColorUIResource(Color.yellow));
        UIManager.put("ToolTip.font", new FontUIResource(new Font("Verdana", Font.PLAIN, 18)));
        UIManager.put("ToolTip.border", new BorderUIResource(compound));
        JButton button = new JButton("Hello, world");
        button.setToolTipText("<html> - myText <br> - myText <br> - myText <br>");
        getContentPane().add(button);
        JFrame frame = new JFrame("Colored ToolTip Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 100);
        frame.setVisible(true);
    }

    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ColoredToolTipExample();
            }
        });
    }
}
于 2013-09-09T07:41:37.510 に答える
1

setToolTipTextに追加できないと思いますTitledBorder。のツールチップを提供できますが、JComponentからTitledBorder派生したものではありませんJComponent

JPanel代わりに使用することができます:

 ToolTipManager.sharedInstance().registerComponent(new JPanel());
 //ToolTipManager.sharedInstance().setDismissDelay(800000);
于 2013-09-09T06:52:26.137 に答える