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();
Vector<?> vec = new Vector<Object>(def.keySet());
Collections.sort(vec, new Comparator<Object>() {

  public int compare(Object arg0, Object arg1) {
    return arg0.toString().compareTo(arg1.toString());
  }

});

for (Object obj : vec) {
  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”

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.