Java中的多行工具提示?

Ama*_*a S 103 java swing tooltip

我正在尝试在Java中显示工具提示,这可能是段落长度,也可能不是.如何自动换行长工具提示?

Pau*_*lin 144

如果包裹在工具提示<html></html>标签,你可以打破与线<br>标记.有关示例和讨论,请参见http://www.jguru.com/faq/view.jsp?EID=10653.

或者您可以使用可以在网上找到许多地方的JMultiLineToolTip类,包括 https://github.com/ls-cwi/yoshiko-app/blob/master/src/main/java/com/yoshiko/internal/视图/ JMultiLineToolTip.java

  • 我使用了您建议的 JMultiLineToolTip 类。一旦我使用 setFixedWidth() 将工具提示限制为合理的大小,效果就很好。谢谢! (2认同)

Tom*_*ine 24

以" <html>" 开头的工具提示文本将被视为HTML.当然,这可能是非常宽的HTML.

您可以覆盖JComponent.createTooltip以将工具提示替换为您自己的组件,该组件可以显示您喜欢的whatevee.

  • +1用于解释如何替换默认工具提示 (2认同)

小智 19

我知道这个很老了,但我找到了一个使用HTML代码的简单解决方案!

只需使用固定宽度的HTML段落:

setToolTipText("<html><p width=\"500\">" +value+"</p></html>");
Run Code Online (Sandbox Code Playgroud)


bas*_*ero 5

使用HTML工具提示并手动断行(具有固定行长度的简单单词标记器应该这样做).只需确保您的tooltop文本以"<HTML>"开头即可.用"<BR/>"或"<P>"分隔行.我意识到这不是最干净的解决方案,Java的HTML支持是可怕的,但它应该完成任务.


ja4*_*ja4 5

例子:

jTextField1.setToolTipText("<html>"
                              + "Line One"
                              +"<br>"
                              + "Line 2"
                         + "</html>");
Run Code Online (Sandbox Code Playgroud)

  • @ArtB 此示例代码确实按要求提供了两行工具提示。 (2认同)

Pau*_*lor 5

这可以有所改进,但我的方法是在设置工具提示之前调用一个辅助函数,该函数以提供的长度拆分工具提示文本,但调整为在可能的情况下在空格上打断单词。

import java.util.ArrayList;
import java.util.List;

/**
 *
 */
public class MultiLineTooltips
{
    private static int DIALOG_TOOLTIP_MAX_SIZE = 75;
    private static final int SPACE_BUFFER = 10;

    public static String splitToolTip(String tip)
    {
        return splitToolTip(tip,DIALOG_TOOLTIP_MAX_SIZE);
    }
    public static String splitToolTip(String tip,int length)
    {
        if(tip.length()<=length + SPACE_BUFFER )
        {
            return tip;
        }

        List<String>  parts = new ArrayList<>();

        int maxLength = 0;
        String overLong = tip.substring(0, length + SPACE_BUFFER);
        int lastSpace = overLong.lastIndexOf(' ');
        if(lastSpace >= length)
        {
            parts.add(tip.substring(0,lastSpace));
            maxLength = lastSpace;
        }
        else
        {
            parts.add(tip.substring(0,length));
            maxLength = length;
        }

        while(maxLength < tip.length())
        {
            if(maxLength + length < tip.length())
            {
                parts.add(tip.substring(maxLength, maxLength + length));
                maxLength+=maxLength+length;
            }
            else
            {
                parts.add(tip.substring(maxLength));
                break;
            }
        }

        StringBuilder  sb = new StringBuilder("<html>");
        for(int i=0;i<parts.size() - 1;i++)
        {
            sb.append(parts.get(i)+"<br>");
        }
        sb.append(parts.get(parts.size() - 1));
        sb.append(("</html>"));
        return sb.toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用喜欢

jComponent.setToolTipText(MultiLineTooltips.splitToolTip(TOOLTIP));
Run Code Online (Sandbox Code Playgroud)