# Look And Feel zur Laufzeit ändern



## padde479 (6. Mrz 2007)

Hi Forum,

in meiner Anwendung soll der Benutzer einstellen können, welches LookAndFeel er haben möchte. Alles klar: Menueintrag mit _JRadioButtonMenuItem_ die jeweils ein Look And Feel repräsentieren. Aber wie reagiere ich auf die Änderungen? Hier erst einmal mein Code

```
...
private JRadioButtonMenuItem getMetal() {
		item = new JRadioButtonMenuItem(Messages.getString("settingslufmetal"), true);
		item.addActionListener(this);
		return item;
	}
	
	private JRadioButtonMenuItem getMotif() {
		item = new JRadioButtonMenuItem(Messages.getString("settingslufmotif"), false);
		item.addActionListener(this);
		return item;
	}
	
	private JRadioButtonMenuItem getWindows() {
		item = new JRadioButtonMenuItem(Messages.getString("settingslufwindows"), false);
		item.addActionListener(this);
		return item;
	}
...
public void actionPerformed(ActionEvent evt) {
		// TODO Set new Look And Feel
		if (item.getText().equals("Metal")){
			try {
				UIManager.setLookAndFeel(Messages.getString("metal"));
			} catch (UnsupportedLookAndFeelException exception) {
			} catch (ClassNotFoundException exception) {
			} catch (InstantiationException exception) {
			} catch (IllegalAccessException exception) {
			}
		}
		if (item.getText().equals("Motif")) {
			try {
				UIManager.setLookAndFeel(Messages.getString("motif"));
			} catch (UnsupportedLookAndFeelException exception) {
			} catch (ClassNotFoundException exception) {
			} catch (InstantiationException exception) {
			} catch (IllegalAccessException exception) {
			}
		}
		if (item.getText().equals("Windows")) {
			try {
				UIManager.setLookAndFeel(Messages.getString("windows"));
			} catch (UnsupportedLookAndFeelException exception) {
			} catch (ClassNotFoundException exception) {
			} catch (InstantiationException exception) {
			} catch (IllegalAccessException exception) {
			}
		}
		// TODO Set new language
		
	}
```

Jetzt passiert noch nichts, wenn ich einen bestimmten Menüeintrag auswähle. Was muss ich denn ändern? Kann mir jemand weiterhelfen? Schon mal vielen Dank im Voraus!

Gruß
Padde


----------



## Beni (6. Mrz 2007)

"SwingUtilities.updateComponentTreeUI" aufrufen, mit allen Frames und Dialogen die dein Programm besitzt. Oder direkt die Methode "updateUI" _aller_ JComponenten, die dein Programm besitzt, aufrufen.

P.S. und was machst du, wenn dein Programm auf einem Linux-PC läuft? Da gibts kein Windows LookAndFeel... :wink:


----------



## Smasher (7. Mrz 2007)

Gibt dir alle vom Betriebssystem unterstützten Look&Feels, vergleicht die Namen mit dem im String "IfName" und setzt bei Übereinstimmung das Look&Feel.

```
...
UIManager.LookAndFeelInfo[] ls = UIManager.getInstalledLookAndFeels();
for(int i = 0; i < ls.length; i++) {
   if(lfName.equals(ls[i].getName())) {
      String className = ls[i].getClassName();
      setLookAndFeel(className);
   }
...
private void setLookAndFeel(String className) {
   try {
      UIManager.setLookAndFeel(className);
      SwingUtilities.updateComponentTreeUI(this);
   }
      catch(Exception ex) {
   }
}
```

Damit kann man unter Linux kein Windoof Look&Feel setzten und umgekehrt.  :wink:


----------

