D) UIManager Defaults
Wie Sie wissen, wird das Aussehen einer GUI durch das LookAndFeel
bestimmt, welches dem UIManager
gesetzt wird. Oftmals ist es so, dass die Darstellung einzelner Komponenten nicht richtig in das gewünschte Konzept passt. Aber Jede einzelne Instanz dieser Komponente anzupassen wäre viel zu fehleranfällig und aufwendig. Eine eigene Klasse, die das gewünschte Aussehen annimmt, ist eine Möglichkeit dieses Problem zu lösen. Aber es geht noch einfacher und allgemeiner – durch das Setzen der UIProperties.
Sie können dem UIManager
über dessen put
-Methode Parameter für die Darstellung bestimmter Komponenten setzen. Um bspw. die Hintergrundfarbe eines jeden Textfeldes anzupassen, oder die Schriftart aller Labels zu verändern, könnten Sie folgenden Code verwenden:
UIManager.put("TextField.background", new ColorUIResource(new Color(200, 100, 155))); UIManager.put("Label.font", new FontUIResource(new Font("monospaced", Font.PLAIN, 20)));
Zum Testen führen Sie folgenden Code einmal mit und einmal ohne den oben genannten Zeilen aus:
package de.jbb.tools; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Font; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.UIManager; import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.FontUIResource; public class UIDefTest { public static void main(String[] args) { UIManager.put("TextField.background", new ColorUIResource(new Color(200, 100, 155))); UIManager.put("Label.font", new FontUIResource(new Font("monospaced", Font.PLAIN, 20))); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new FlowLayout()); JTextField f = new JTextField("Das ist ein Test-Text"); JLabel l = new JLabel("Das ist ein Test-Label"); frame.add(f); frame.add(l); frame.pack(); frame.setVisible(true); } }
Leider können nicht alle Eigenschaften über den UIManger
angepasst werden. Deshalb ist es wichtig zu überprüfen, welche Eigenschaften für das jeweilige LookAndFeel überhaupt verfügbar sind. Eine alphabetisch sortierte Auflistung aller Eigenschaften mit ihren Default-Werten erhalten Sie durch folgenden Code:
UIDefaults def = UIManager.getLookAndFeelDefaults(); List<?> list = new ArrayList<>(def.keySet()); Collections.sort(list, new Comparator<object>() { public int compare(Object arg0, Object arg1) { return arg0.toString().compareTo(arg1.toString()); } }); for (Object obj : list) { System.out.println(obj + "\n\t" + def.get(obj)); }
Anhand dieser Auflistung können Sie auch ablesen, welche UIResource
für welche Eigenschaft benötigt wird. Diese können Sie selbstverständlich auch durch die get
Methode der UIManager
-Klasse direkt abfragen und ggf. nach Ihren Wünschen manipulieren;
System.out.println(UIManager.get("Label.font")); FontUIResource fur = (FontUIResource)UIManager.get("Label.font"); if (fur.isBold()) { Font f = new Font(fur.getFamily(), Font.PLAIN, fur.getSize()); UIManager.put("Label.font", f); } System.out.println(UIManager.get("Label.font"));
One Reply to “D) UIManager Defaults”