Sto tentando di visualizzare descrizioni comandi in Java che potrebbero essere o meno lunghezze di paragrafo. In che modo è possibile racchiudere lunghi suggerimenti?Tooltip multilinea in Java?
risposta
Se si configura il suggerimento nei tag <html>
e </html>
, è possibile interrompere le linee con i tag <br>
. Vedi http://www.jguru.com/faq/view.jsp?EID=10653 per esempi e discussioni.
Oppure è possibile utilizzare la classe JMultiLineToolTip che si possono trovare molti luoghi sulla rete, tra cui tooltip http://code.ohloh.net/search?s=jmultilinetooltip
Ho usato la classe JMultiLineToolTip che hai suggerito. Una volta che ho usato setFixedWidth() per limitare il tooltip a una dimensione ragionevole, ha funzionato alla grande. Grazie! –
usare l'HTML e manualmente rompere le linee (una semplice parola tokenizer con una lunghezza di linea fissa dovrebbe farlo) . Assicurati solo che il testo del tuo strumento inizia con "<HTML>". Interrompere le linee con "< BR/>" o "<P>". Mi rendo conto che non è la soluzione più pulita e il supporto HTML di Java è orribile, ma dovrebbe fare le cose.
Il testo del suggerimento che inizia con "<html>
" verrà trattato come HTML. Ovviamente questo potrebbe essere un HTML molto ampio.
È possibile ignorare lo JComponent.createTooltip per sostituire il suggerimento con il proprio componente che può visualizzare ciò che si desidera.
+1 per spiegare come sostituire il suggerimento predefinito –
È possibile creare sottoclasse JToolTip, che è un componente, e sovrascrivere createToolTip() sul componente.
Esempio:
jTextField1.setToolTipText("<html>"
+ "Line One"
+"<br>"
+ "Line 2"
+ "</html>");
Questo non risponde alla domanda del richiedente. Stava chiedendo del wrapping quando è visualizzato, non nel codice sorgente. – ArtB
@ArtB questo codice di esempio fornisce una descrizione a due righe come richiesto. – Thelema
@Thelema Ah, quindi in tal caso l'ho formattato come 'jTextField1.setToolTipText (" Line One
Riga 2 ");' –
ArtB
Questo potrebbe essere migliorata un po ', ma il mio approccio è stato una funzione di supporto chiamata prima di tooltip che ha diviso il testo della descrizione comandi in condizione di lunghezza, ma regolato per rompere le parole sullo spazio, se possibile.
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();
}
}
Usa come
jComponent.setToolTipText(MultiLineTooltips.splitToolTip(TOOLTIP));
Ecco una versione che ho usato prima, funziona bene se si sta caricando i tuoi suggerimenti utensili da ResourceBundles:
import javax.swing.JComponent;
import javax.swing.JToolTip;
import javax.swing.LookAndFeel;
import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.ToolTipUI;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.util.regex.Pattern;
/**
* A tooltip that wraps multi-line text.
*/
public final class MultiLineToolTipUI extends ToolTipUI {
private static final int INSET = 2;
private static final Pattern LINE_SPLITTER = Pattern.compile("$", Pattern.MULTILINE);
private static final MultiLineToolTipUI SHARED_INSTANCE = new MultiLineToolTipUI();
/**
* Install the multi-line tooltip into the UI manager.
*/
public static void installUI() {
String toolTipUI = MultiLineToolTipUI.class.getName();
UIManager.put("ToolTipUI", toolTipUI);
UIManager.put(toolTipUI, MultiLineToolTipUI.class);
}
@SuppressWarnings("UnusedDeclaration")
public static ComponentUI createUI(JComponent c) {
return SHARED_INSTANCE;
}
private MultiLineToolTipUI() {}
@Override
public Dimension getMaximumSize(JComponent c) {
return getPreferredSize(c);
}
@Override
public Dimension getMinimumSize(JComponent c) {
return getPreferredSize(c);
}
@Override
public Dimension getPreferredSize(JComponent c) {
String[] lines = LINE_SPLITTER.split(((JToolTip) c).getTipText());
if (lines.length == 0) {
return new Dimension(2 * INSET, 2 * INSET);
}
FontMetrics metrics = c.getFontMetrics(c.getFont());
Graphics g = c.getGraphics();
int w = 0;
for (String line : lines) {
w = Math.max(w, (int) metrics.getStringBounds(line, g).getWidth());
}
int h = lines.length * metrics.getHeight();
return new Dimension(w + 2 * INSET, h + 2 * INSET);
}
@Override
public void installUI(JComponent c) {
LookAndFeel.installColorsAndFont(c, "ToolTip.background", "ToolTip.foreground", "ToolTip.font");
LookAndFeel.installBorder(c, "ToolTip.border");
}
@Override
public void paint(Graphics g, JComponent c) {
int w = c.getWidth(), h = c.getHeight();
g.setColor(c.getBackground());
g.fillRect(0, 0, w, h);
g.setColor(c.getForeground());
g.drawRect(0, 0, w, h);
String[] lines = LINE_SPLITTER.split(((JToolTip) c).getTipText());
if (lines.length != 0) {
FontMetrics metrics = c.getFontMetrics(c.getFont());
int height = metrics.getHeight();
int y = INSET + metrics.getAscent();
for (String line : lines) {
g.drawString(line, INSET, y);
y += height;
}
}
}
@Override
public void uninstallUI(JComponent c) {
LookAndFeel.uninstallBorder(c);
}
}
E si userebbe chiamando questo metodo, prima che l'interfaccia utente venga creata:
MultiLineToolTipUI.installUI();
Quindi nei file delle proprietà è sufficiente inserire nuove righe per avvolgere i suggerimenti degli strumenti come desiderato.
So che questo è piuttosto vecchio ma ho trovato una soluzione abbastanza semplice utilizzando il codice HTML!
basta usare un paragrafo HTML con una larghezza fissa:
setToolTipText("<html><p width=\"500\">" +value+"</p></html>");
Cosa fare se voglio visualizzare del testo che è molto più corto della dimensione del suggerimento? il tag "max-width" non funziona qui –
se si aggiunge solo <html>
al testo tooltip, apparirà a lavorare fino ad avere /*...*/
o HTML nel testo. Utilizzare <html><pre>
o sfuggire il testo. Ho anche dovuto usare <font size=3>
per farlo sembrare un po 'decente.
- 1. Java 7 - stringhe multilinea
- 2. altalena Java: etichette multilinea?
- 3. java, tooltip multilinea con larghezza massima fissa, utilizzando il tag html
- 4. Incollare una stringa Java multilinea in Eclipse
- 5. Come rendere multilinea TextView in Android (Java)
- 6. multilinea JAVA_OPTS in setenv.sh
- 7. Utilità di annotazione Java per testo multilinea
- 8. Perché il commento multilinea in stile "//" è errato (in Java)?
- 9. Styling tooltip nativo da title = "testo Tooltip"
- 10. avviso multilinea in Javascript
- 11. Dichiarazione multilinea in Swift
- 12. Commento multilinea in awk
- 13. Etichetta multilinea in asp.net
- 14. Comandi multilinea in GHCi
- 15. Commento multilinea in elisir
- 16. Stringa letterale multilinea in Matlab?
- 17. jQuery Tooltip UI - grilletto tooltip dopo x secondi
- 18. valori tooltip in formato jqplot
- 19. Common Tooltip style in WPF
- 20. Disattiva tooltip in Eclipse/Aptana
- 21. numeri Format tooltip in Highcharts
- 22. Tooltip interattivi in trama matplotlib
- 23. Comparatore lambda multilinea
- 24. CATextLayer multilinea
- 25. Etichette multilinea automatiche in Graphviz?
- 26. Testo multilinea in celle Excel
- 27. Espressione regolare multilinea in C#
- 28. Scrivi aritmetica multilinea in rubino
- 29. jQueryUI tooltip Widget per mostrare tooltip su Clicca
- 30. jquery ui conflitto di tooltip con bootstrap 3 tooltip
Fornire un esempio di codice. –
I suggerimenti per gli strumenti non avvengono automaticamente a capo automatico se sono racchiusi tra tag HTML? Non ne sono sicuro, quindi non sto inserendo questo come risposta. –
Paul: solo se si dispone di interruzioni di riga esplicite. –