Estou tentando exibir dicas de ferramentas em Java que podem ou não ter o comprimento de um parágrafo. Como posso moldar as dicas de ferramentas longas?
As dicas de ferramentas não quebram automaticamente se estiverem contidas em tags HTML? Não tenho certeza, então não estou colocando isso como uma resposta.
Paul Tomblin
Paul: Somente se você tiver quebras de linha explícitas.
Amanda S
Respostas:
146
Se você envolver a dica de ferramenta em tags <html>e </html>, poderá quebrar as linhas com <br>tags. Consulte http://www.jguru.com/faq/view.jsp?EID=10653 para obter exemplos e discussão.
Usei a classe JMultiLineToolTip que você sugeriu. Depois de usar setFixedWidth () para limitar a dica de ferramenta a um tamanho razoável, funcionou muito bem. Obrigado!
Amanda S
24
O texto da dica de ferramenta que começa com " <html>" será tratado como HTML. Claro que pode ser um HTML muito amplo.
Você pode substituir JComponent.createTooltip para substituir a dica de ferramenta por seu próprio componente, que pode exibir o que você quiser.
E se eu quiser exibir um texto muito menor do que o tamanho da dica de ferramenta? A tag "max-width" não funciona aqui
nickolay.laptev
5
Use dicas de ferramentas HTML e quebre manualmente suas linhas (um tokenizador de palavras simples com um comprimento de linha fixo deve servir). Apenas certifique-se de que o texto da sua ferramenta comece com "<HTML>". Quebre as linhas com "<BR/>" ou "<P>". Sei que não é a solução mais limpa e o suporte a HTML do Java é horrível, mas deve resolver o problema.
Isso não responde à pergunta do autor da pergunta. Ele estava perguntando sobre o empacotamento quando for exibido, não no código-fonte.
Trenó de
2
@ArtB este código de exemplo fornece uma dica de ferramenta de duas linhas, conforme solicitado.
Thelema
4
Isso poderia ser melhorado um pouco, mas minha abordagem era uma função auxiliar chamada antes de definir a dica de ferramenta que dividia o texto da dica de ferramenta no comprimento fornecido, mas ajustada para quebrar palavras no espaço onde possível.
Criei uma classe de utilitário que formata automaticamente strings para um comprimento específico com <br>tags. Ele é baseado na classe MultiLineToolTips postada por Paul Taylor, mas há um bug que pula partes da string e não a limita a um comprimento específico.
Para usar minha classe, basta invocar o método splitToolTip escrevendo MultiLineToolTips.splitToolTip(yourString);ou MultiLineToolTips.splitToolTip(yourString, maxLength);se quiser dividi-lo em um comprimento máximo específico. Isso criará strings de dicas de ferramenta bem formatadas.
import java.util.ArrayList;import java.util.List;/** A helper class to split strings into a certain length,
* formatted with html {@literal<br>} tags for multi-line tool tips.
* Based on the MultiLineToolTips class posted by
* <a href="https://stackoverflow.com/users/1480018/paul-taylor">Paul Taylor</a>
* on <a href="https://stackoverflow.com/a/13503677/9567822">Stack Overflow</a>
* @author <a href="https://stackoverflow.com/users/9567822/andrew-lemaitre?tab=profile">Andrew LeMaitre</a>
*/publicfinalclassMultiLineToolTips{/** Private constructor for utility class. */privateMultiLineToolTips(){}/** Default max length of the tool tip when split with {@link #splitToolTip(String)}. */privatestaticfinalint DIALOG_TOOLTIP_MAX_SIZE =75;/** A function that splits a string into sections of {@value #DIALOG_TOOLTIP_MAX_SIZE} characters or less.
* If you want the lines to be shorter or longer call {@link #splitToolTip(String, int)}.
* @param toolTip The tool tip string to be split
* @return the tool tip string with HTML formatting to break it into sections of the correct length
*/publicstaticString splitToolTip(finalString toolTip){return splitToolTip(toolTip, DIALOG_TOOLTIP_MAX_SIZE);}/** An overloaded function that splits a tool tip string into sections of a specified length.
* @param toolTip The tool tip string to be split
* @param desiredLength The maximum length of the tool tip per line
* @return The tool tip string with HTML formatting to break it into sections of the correct length
*/publicstaticString splitToolTip(finalString toolTip,finalint desiredLength){if(toolTip.length()<= desiredLength){return toolTip;}List<String> parts =newArrayList<>();int stringPosition =0;while(stringPosition < toolTip.length()){if(stringPosition + desiredLength < toolTip.length()){String tipSubstring = toolTip.substring(stringPosition, stringPosition + desiredLength);int lastSpace = tipSubstring.lastIndexOf(' ');if(lastSpace ==-1|| lastSpace ==0){
parts.add(toolTip.substring(stringPosition, stringPosition + desiredLength));
stringPosition += desiredLength;}else{
parts.add(toolTip.substring(stringPosition, stringPosition + lastSpace));
stringPosition += lastSpace;}}else{
parts.add(toolTip.substring(stringPosition));break;}}StringBuilder sb =newStringBuilder("<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();}}
Se você apenas adicionar <html>ao texto de dica de ferramenta, ele parecerá funcionar até que você tenha um /*...*/HTML em seu texto. Use <html><pre>ou escape seu texto. Eu também tive que usar <font size=3>para deixá-lo um tanto decente.
Respostas:
Se você envolver a dica de ferramenta em tags
<html>
e</html>
, poderá quebrar as linhas com<br>
tags. Consulte http://www.jguru.com/faq/view.jsp?EID=10653 para obter exemplos e discussão.Ou você pode usar a classe JMultiLineToolTip que pode ser encontrada em muitos lugares na rede, incluindo https://github.com/ls-cwi/yoshiko-app/blob/master/src/main/java/com/yoshiko/internal/ view / JMultiLineToolTip.java
fonte
O texto da dica de ferramenta que começa com "
<html>
" será tratado como HTML. Claro que pode ser um HTML muito amplo.Você pode substituir JComponent.createTooltip para substituir a dica de ferramenta por seu próprio componente, que pode exibir o que você quiser.
fonte
Eu sei que este é muito antigo, mas encontrei uma solução bastante simples usando o código HTML!
Basta usar um parágrafo HTML com largura fixa:
fonte
Use dicas de ferramentas HTML e quebre manualmente suas linhas (um tokenizador de palavras simples com um comprimento de linha fixo deve servir). Apenas certifique-se de que o texto da sua ferramenta comece com "<HTML>". Quebre as linhas com "<BR/>" ou "<P>". Sei que não é a solução mais limpa e o suporte a HTML do Java é horrível, mas deve resolver o problema.
fonte
Exemplo:
fonte
Isso poderia ser melhorado um pouco, mas minha abordagem era uma função auxiliar chamada antes de definir a dica de ferramenta que dividia o texto da dica de ferramenta no comprimento fornecido, mas ajustada para quebrar palavras no espaço onde possível.
Usar como
fonte
Você pode criar uma subclasse de JToolTip, que é um componente, e substituir createToolTip () no componente.
fonte
Esta é uma versão que usei antes, ela funciona bem se você estiver carregando suas dicas de ferramentas do ResourceBundles:
E você o usaria chamando este método, antes de sua IU ser criada:
Em seguida, em seus arquivos de propriedades, basta inserir novas linhas para envolver as dicas de ferramenta conforme desejado.
fonte
Criei uma classe de utilitário que formata automaticamente strings para um comprimento específico com
<br>
tags. Ele é baseado na classe MultiLineToolTips postada por Paul Taylor, mas há um bug que pula partes da string e não a limita a um comprimento específico.Para usar minha classe, basta invocar o método splitToolTip escrevendo
MultiLineToolTips.splitToolTip(yourString);
ouMultiLineToolTips.splitToolTip(yourString, maxLength);
se quiser dividi-lo em um comprimento máximo específico. Isso criará strings de dicas de ferramenta bem formatadas.fonte
Se você apenas adicionar
<html>
ao texto de dica de ferramenta, ele parecerá funcionar até que você tenha um/*...*/
HTML em seu texto. Use<html><pre>
ou escape seu texto. Eu também tive que usar<font size=3>
para deixá-lo um tanto decente.fonte