import java.awt.GridLayout;
import java.awt.Rectangle;
import java.awt.event.ActionListener;
+import java.util.Objects;
import javax.swing.AbstractButton;
import javax.swing.JButton;
public final class JvSwingUtils
{
/**
- * wrap a bare html safe string to around 60 characters per line using a
- * <table width=350>
- * <tr>
- * <td></td> field
- * @param enclose TODO
- * @param ttext
+ * wrap a bare html safe string to around 60 characters per line using a CSS
+ * style class specifying word-wrap and break-word
+ *
+ * @param enclose
+ * if true, add <html> wrapper tags
+ * @param ttext
*
* @return
*/
public static String wrapTooltip(boolean enclose, String ttext)
{
+ Objects.requireNonNull(ttext, "Tootip text to format must not be null!");
ttext = ttext.trim();
- if (ttext.length() < 60)
+ boolean maxLengthExceeded = false;
+
+ if (ttext.contains("<br>"))
{
- return enclose ? "<html>" + ttext + "</html>" : ttext;
+ String[] htmllines = ttext.split("<br>");
+ for (String line : htmllines)
+ {
+ maxLengthExceeded = line.length() > 60;
+ if (maxLengthExceeded)
+ {
+ break;
+ }
+ }
}
else
{
- return (enclose ? "<html>" : "")
- + "<table width=350 border=0><tr><td>" + ttext
- + "</td></tr></table>" + ((enclose ? "</html>" : ""));
+ maxLengthExceeded = ttext.length() > 60;
}
+
+ if (!maxLengthExceeded)
+ {
+ return enclose ? "<html>" + ttext + "</html>" : ttext;
+ }
+
+ return (enclose ? "<html>" : "")
+ + "<style> p.ttip {width: 350; text-align: justify; word-wrap: break-word;}</style><p class=\"ttip\">"
+ + ttext + "</p>" + ((enclose ? "</html>" : ""));
+
}
public static JButton makeButton(String label, String tooltip,
JPanel laypanel = new JPanel(new GridLayout(1, 2));
JPanel labPanel = new JPanel(new BorderLayout());
JPanel valPanel = new JPanel();
- // laypanel.setSize(panel.getPreferredSize());
- // laypanel.setLayout(null);
labPanel.setBounds(new Rectangle(7, 7, 158, 23));
valPanel.setBounds(new Rectangle(172, 7, 270, 23));
- // labPanel.setLayout(new GridLayout(1,1));
- // valPanel.setLayout(new GridLayout(1,1));
labPanel.add(label, BorderLayout.WEST);
valPanel.add(valBox);
laypanel.add(labPanel);