Closed homebeaver closed 2 years ago
das scheint am Text parameter zu liegen:
new JButton("One")
zeigt die Strichenew JButton("<html><font size=2>One</font></html>")
Beim dritten Button kommt der Text aus den props und ist html, aber mit Fehler bei bold:
ButtonDemo.button3=<html><font size=2 color=red><bold>Three!</font></html>
Nein, hat nichts mit Text parameter zu tun.
Es hat mit button border zu tun!
Per default sind die button border CompoundBorder
. Diese bestehen aus zwei Teilen
insideBorder
: definiert in inner Class BasicBorders.MarginBorder
outsideBorder
: definiert in inner Class MetalBorders.ButtonBorder
- das ist die dunkle Umrandung des buttonsBorder bd = button.getBorder();
if(bd instanceof BorderUIResource.CompoundBorderUIResource) {
BorderUIResource.CompoundBorderUIResource cb = (BorderUIResource.CompoundBorderUIResource)bd;
LOG.info("InsideBorder:"+cb.getInsideBorder() + ", OutsideBorder:"+cb.getOutsideBorder());
...
InsideBorder:javax.swing.plaf.basic.BasicBorders$MarginBorder@56f4468b,
OutsideBorder:javax.swing.plaf.metal.MetalBorders$ButtonBorder@6cc4c815
Wird bei dieser Konstellation border paint ausgeschaltet button.setBorderPainted(false);
, so wird der freigelassene Platz Insets margin
nicht "bemalt": paint()
-Methode.
insideBorder
, dort werden Pixel für den Rand reserviert. Aber es ist nicht bekannt, dass der Rand gar nicht bemalt wird.outsideBorder
- die MetalBorders.ButtonBorder
Klasse das insideBorder
Objekt nicht. Und kann daher nicht mitteilen, dass die insets etwas anders berechnet werden müssen.Abhilfe: man kann die Klassen patchen. Das werde ich implementieren
In https://github.com/homebeaver/SwingSet2-demos/releases/tag/v1.2 gelöst. ABER nicht gut genug.