Я пытаюсь отображать всплывающие подсказки на Java, которые могут иметь длину абзаца, а могут и нет. Как перенести длинные всплывающие подсказки по словам?
Разве подсказки не переносятся автоматически по словам, если они заключены в теги HTML? Я не уверен, поэтому я не использую это как ответ.
Пол Томблин,
Пол: Только если у вас есть явный перенос строки.
Amanda S,
Ответы:
146
Если вы заключаете всплывающую подсказку в <html>и </html>тегах, вы можете разбить строки с <br>тегами. См. Http://www.jguru.com/faq/view.jsp?EID=10653 для примеров и обсуждения.
Я использовал предложенный вами класс JMultiLineToolTip. Когда я использовал setFixedWidth (), чтобы ограничить всплывающую подсказку разумным размером, она отлично сработала. Спасибо!
Amanda S
24
Текст всплывающей подсказки, начинающийся с " <html>", будет рассматриваться как HTML. Конечно, это может быть очень широкий HTML.
Вы можете переопределить JComponent.createTooltip, чтобы заменить всплывающую подсказку своим собственным компонентом, который может отображать все, что вам нравится.
Что, если я хочу отобразить текст, который намного короче размера всплывающей подсказки? Тег "max-width" здесь не работает
nickolay.laptev
5
Используйте всплывающие подсказки HTML и вручную разбивайте строки (это должен сделать простой токенизатор слов с фиксированной длиной строки). Просто убедитесь, что текст вашей панели инструментов начинается с «<HTML>». Разрывайте строки с помощью «<BR/>» или «<P>». Я понимаю, что это не самое чистое решение, а поддержка HTML в Java ужасна, но с этим нужно работать.
Это не ответ на вопрос автора. Он спрашивал об упаковке, когда она отображается, а не в исходном коде.
Sled
2
@ArtB этот пример кода действительно дает всплывающую подсказку из двух строк, как и просили.
Thelema
4
Это можно было бы несколько улучшить, но мой подход был вспомогательной функцией, вызываемой перед установкой всплывающей подсказки, которая разделяла текст всплывающей подсказки на заданную длину, но настраивалась так, чтобы разбивать слова на пробел, где это возможно.
Я создал служебный класс, который автоматически форматирует строки до определенной длины с помощью <br>тегов. Он основан на классе MultiLineToolTips, опубликованном Полом Тейлором, но у него есть ошибка, которая пропускает части строки и фактически не ограничивает строку определенной длиной.
Чтобы использовать мой класс, просто вызовите метод splitToolTip, написав MultiLineToolTips.splitToolTip(yourString);или, MultiLineToolTips.splitToolTip(yourString, maxLength);если вы хотите разделить его до определенной максимальной длины. Это создаст красиво отформатированные строки подсказок.
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();}}
Если вы просто добавите <html>текст всплывающей подсказки, он будет работать до тех пор, пока в тексте не будет /*...*/HTML или HTML. Используйте <html><pre>или экранируйте свой текст. Мне также пришлось использовать, <font size=3>чтобы он выглядел несколько прилично.
Ответы:
Если вы заключаете всплывающую подсказку в
<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
источник
Текст всплывающей подсказки, начинающийся с "
<html>
", будет рассматриваться как HTML. Конечно, это может быть очень широкий HTML.Вы можете переопределить JComponent.createTooltip, чтобы заменить всплывающую подсказку своим собственным компонентом, который может отображать все, что вам нравится.
источник
Я знаю, что этот довольно старый, но я нашел довольно простое решение с использованием HTML-кода!
Просто используйте абзац HTML с фиксированной шириной:
источник
Используйте всплывающие подсказки HTML и вручную разбивайте строки (это должен сделать простой токенизатор слов с фиксированной длиной строки). Просто убедитесь, что текст вашей панели инструментов начинается с «<HTML>». Разрывайте строки с помощью «<BR/>» или «<P>». Я понимаю, что это не самое чистое решение, а поддержка HTML в Java ужасна, но с этим нужно работать.
источник
Пример:
источник
Это можно было бы несколько улучшить, но мой подход был вспомогательной функцией, вызываемой перед установкой всплывающей подсказки, которая разделяла текст всплывающей подсказки на заданную длину, но настраивалась так, чтобы разбивать слова на пробел, где это возможно.
Использовать как
источник
Вы можете создать подкласс JToolTip, который является компонентом, и переопределить createToolTip () в компоненте.
источник
Вот версия, которую я использовал раньше, она хорошо работает, если вы загружаете свои подсказки из ResourceBundles:
И вы могли бы использовать его, вызвав этот метод до создания вашего пользовательского интерфейса:
Затем в файлах свойств просто вставьте новые строки, чтобы обернуть подсказки по своему усмотрению.
источник
Я создал служебный класс, который автоматически форматирует строки до определенной длины с помощью
<br>
тегов. Он основан на классе MultiLineToolTips, опубликованном Полом Тейлором, но у него есть ошибка, которая пропускает части строки и фактически не ограничивает строку определенной длиной.Чтобы использовать мой класс, просто вызовите метод splitToolTip, написав
MultiLineToolTips.splitToolTip(yourString);
или,MultiLineToolTips.splitToolTip(yourString, maxLength);
если вы хотите разделить его до определенной максимальной длины. Это создаст красиво отформатированные строки подсказок.источник
Если вы просто добавите
<html>
текст всплывающей подсказки, он будет работать до тех пор, пока в тексте не будет/*...*/
HTML или HTML. Используйте<html><pre>
или экранируйте свой текст. Мне также пришлось использовать,<font size=3>
чтобы он выглядел несколько прилично.источник