2013-08-06

Ultimate Swing, Teil 28

Im vorherigen Post habe ich eine kleine Baustelle hinterlassen: Radiobuttons und Checkboxen haben eine Hintergrundfarbe, die zumindest unter bestimmten Look and Feels nicht zum Hintergrund von Registerkarten passt. Dieses Problem tritt auf, wenn die Komponenten Teil eines JPanels sind, für das mit setOpaque(false) der Hintergrund ausgeschaltet wurde. Das wiederum ist nötig, weil die Panels sonst (wieder nur unter bestimmten Look and Feels) den Hintergrund der Registerkarten verdecken.

Die Lösung ist einfach. Auch für die betroffenen Komponenten muss setOpaque(false) aufgerufen werden. Übrigens ist das Ganze nicht neu, wie ein Post auf code beach zeigt. Auch auf java.net gab es einen recht interessanten Thread.

Screenshot: Notes and Tasks im Metal-Look
Screenshot: Notes and Tasks im Metal-Look

Unter Windows 8 und dem guten alten Metal ist nun alles in Ordnung. Lassen Sie uns ausprobieren, wie sich Nimbus schlägt. Hierzu müssen wir nur Folgendes auf der Kommandozeile angeben:

-Dswing.defaultlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel 

Screenshot: Notes and Tasks mit Nimbus-Look and Feel
Screenshot: Notes and Tasks mit Nimbus-Look and Feel

Sieht irgendwie komisch aus, oder? Lauert etwa schon der nächste Stolperstein auf uns? Der Trenner wird nicht gezeichnet, weil ich in meinem Quelltext beim Instantiieren einer JTabbedPane die so genannte tabLayoutPolicy auf SCROLL_TAB_LAYOUT gesetzt hatte. Mit diesem Parameter steuern Sie das Verhalten einer Tabbed Pane, wenn nicht alle Register gleichzeitig dargestellt werden können. Spätestens nach der Lektüre des Eintrags zu Fehler 7031915 wissen wir, dass Nimbus SCROLL_TAB_LAYOUT nicht implementiert. Zum Glück ist das Problem aber schnell behoben. Mit WRAP_TAB_LAYOUT klappt das Zeichnen. ...naja, zumindest halbwegs...

Screenshot: Verbesserte Version
Screenshot: Verbesserte Version

Wahrscheinlich fragen Sie sich wie ich, warum auf dem Screenshot kein Rahmen um die Tabbed Pane gezeichnet wird. Auch hierzu gibt es einen Eintrag in der Fehlerdatenbank. Unglücklicherweise harrt Fehler 6726247 aber noch einer Aufarbeitung. Und das wird sicher auch so bleiben.

Ein letzter Versuch, diesmal mit dem Windows Look and Feel. In diesem Fall geben Sie auf der Kommandozeile Folgendes an:

-Dswing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel

Screenshot: Notes and Tasks mit dem Windows Look and Feel
Screenshot: Notes and Tasks mit dem Windows Look and Feel

Diesmal habe ich nichts auszusetzen. Und was sagen Sie?

2 comments:

  1. Das Look and Feel-Thema mit den ganzen Bugs (Vor allem wenn es auch mit dem GTK L&F und dem Open-Jdk laufen soll) kann einen schon gehörig auf den Senkel gehen. Meiner Erfahrung nach legt man sich nach Möglichkeit auf ein Plattformübergreifendes Look and Feel fest.

    ReplyDelete
    Replies
    1. > Meiner Erfahrung nach legt man sich nach
      > Möglichkeit auf ein Plattformübergreifendes
      > Look and Feel fest.

      Im Prinzip stimmt das; leider hat auch das zuweilen Probleme zur Folge (ich erinnere an meine aha-Erlebnisse mit Nimbus ;-))

      Delete