Look And Feel zur Laufzeit ändern

Status
Nicht offen für weitere Antworten.

padde479

Bekanntes Mitglied
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
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
 
"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:
 
Gibt dir alle vom Betriebssystem unterstützten Look&Feels, vergleicht die Namen mit dem im String "IfName" und setzt bei Übereinstimmung das Look&Feel.
Code:
...
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:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben