Portal > Foren > Java > Desktop-Applikationen und Grafik > LookAndFeel ändern...
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 05.06.2004, 03:29 Nach oben    #1
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard LookAndFeel ändern...

Hi,

da ich hauptsächlich unter OSX programmiere, schaue ich mir öfter mal andere Themes an, damit ich weiß, wie es halt sonst so aussieht.
Code:
try{
    javax.swing.UIManager.setLookAndFeel(choose);
}
catch(Exception ex){
    System.out.println("could'nt load look and feel " + ex);
}
So schaut es eigentlich aus und klappt auch.

Jetzt möchte ich während der Entwicklungsphase ein kleines Frame mit einem Button haben, wo ich direkt die LookAndFeel's wählen kann.

In der Console (mit Sysout) gibt er auch die Änderung des Themes aus. Jedoch ändert sich die Oberfläche nicht.

Weiß jemand Rat?
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.06.2004, 03:38 Nach oben    #2
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Ok,

ich habe jetzt herausgefunden, dass ich das LookAndFeel nur ändern kann, wenn ich noch kein JFrame offen habe. Danach kann ich es nicht mehr ändern.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.06.2004, 11:53 Nach oben    #3
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

doch, du kannst es nachher schon noch ändern. Nur musst du die Änderung dann selber für jedes Widget vornehmen.

Oder so ähnlich afair. Hab schon lange kein Swing mehr gemacht

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.06.2004, 11:56 Nach oben    #4
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.133
Standard

Code:
	public static void setLookAndFeel(String lookAndFeel, Component comp) {
		try {
			UIManager.setLookAndFeel(lookAndFeel);
			SwingUtilities.updateComponentTreeUI(comp);
		} catch(Exception e) {
			// Nothing
		}
	}
Viel Spass damit.
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.06.2004, 17:43 Nach oben    #5
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Danke,

das hat wunderbar geklappt. Aber ich dachte, es gäbe eine Möglichkeit, alle Fenster zu ändern. Naja, so schlimm ist das auch nicht.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.06.2004, 18:07 Nach oben    #6
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.133
Standard

Mal etwas weiter gedacht:

Erstelle eine Klasse, die die Komponenten (Fenster) verwaltet, bzw. speichert (ArrayList, etc.).
Diese Klasse könnte dann die Methode setLookAndFeel wie oben demonstriert (nur nicht static) besitzten.
Ein Aufruf der Methode würde dann durch die Liste iterieren und allen Fenstern das neue LookAndFeel verpassen.

Dazu müsstest du dann noch eine Methode "registerComponent" einbinden, die das Fenster / die Komponente in die ArrayList einbindet.

Das wäre die einfachste Möglichkeit, die mir einfällt.
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.06.2004, 19:38 Nach oben    #7
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Hi,

ich habe nun eine allgemeine Klasse erstellt und hänge sie (falls jemand sowas mal benötigt) unten an.

Errm, ich sehen gerade, dass man hier gar keine Files hochladen kann. Dann eben so:

Code:
package lmpDebug;

import javax.swing.JComboBox;
import javax.swing.UIManager;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import java.awt.Component;
import java.awt.GridLayout;
import java.util.ArrayList;

/*  Copyright (C) 2004  Lars Michaelis

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

LMP, hereby disclaims all copyright interest in the
library `LookAndFeelFrame'  written by Lars Michaelis.

Lars Michaelis, 5 June 2004
LMP, Lars Michaelis Projects
GNU LESSER GENERAL PUBLIC LICENSE
*/

/**
 *&lt:p>Decription: Sets LookAndFeel for given Components</p>
 *&lt:p>Organisation: LMP </p>
 *&lt:p>Date: 05.06.2004 </p>
 *@author Lars Michaelis
 *@version 1.0
 */
final public class LookAndFeelFrame extends JFrame {
	
	//LAF positions
	private ArrayList defaultLAFPos   = new ArrayList();
	private ArrayList supportedLAFPos = new ArrayList();
	
	//shown LAFs
	private ArrayList defaultLAF   = new ArrayList();
	private ArrayList supportedLAF = new ArrayList();

	private ArrayList components = new ArrayList();
	
	private JComboBox box1 = new JComboBox();
	private JComboBox box2 = new JComboBox();
	
	/**
	 * creates a LookAndFeel-Frame to change the LAF of given component
	 * @param component given component to change LAF
	 */
	public LookAndFeelFrame(Component component) {
		
		components.add(component);
		
		setPanel(120,130);
		
	}//LookAndFeelFrame(Component component)
	
	/**
	 * creates a LookAndFeel-Frame to change the LAF of given component
	 * on Postion (x,y)
	 * @param component given component to change LAF
	 * @param x horizontal position
	 * @param y vertical position
	 */
	public LookAndFeelFrame(Component component, int x, int y) {
		
		components.add(component);
		
		setPanel(x,y);
		
	}//LookAndFeelFrame(Component component, int x, int y)
	
	//--- public methods ------------------------------------------------------
	
	/**
	 * adds another component to actual list of components of changing LAF
	 * @param component given component to change LAF
	 */
	public void addComponent(Component component) {
		
		components.add(component);
		
	}//addComponent(Component component)
	
	/**
	 * removes given component from list of components of changing LAF
	 * @param component
	 */
	public void removeComponent(Component component) {
		
		for(int i=0; i<components.size(); i++) {
			if(components.get(i).equals(component))
				components.remove(i);
		}
		
	}//removeComponent(Component component)
	
	//--- private methods -----------------------------------------------------
	
	private void setPanel(int x, int y) {
		
		this.setTitle("Debug");
		this.setResizable(false);
		this.setSize(150,80);
		this.setLocation(x,y);
		
		setDefaultLAF();
		setSupportedLAF();
		setComboBoxes();
		setComboBoxListener();
		
	}//setPanel()
	
	private void setDefaultLAF() {
		
		String osx       = "apple.laf.AquaLookAndFeel";
		String metal     = "javax.swing.plaf.metal.MetalLookAndFeel";
		String cde_motif = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
		String windows   = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
		String gtk       = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
		
		defaultLAFPos.add(osx);
		defaultLAFPos.add(metal);
		defaultLAFPos.add(cde_motif);
		defaultLAFPos.add(windows);
		defaultLAFPos.add(gtk);
		
		defaultLAF.add("Mac OS X");
		defaultLAF.add("Metal");
		defaultLAF.add("CDE/Motif");
		defaultLAF.add("Windows");
		defaultLAF.add("GTK");
		
	}//setDefaultLAF()
	
	private void setSupportedLAF() {
		
		UIManager.LookAndFeelInfo[] LAFInfo = UIManager.getInstalledLookAndFeels();
		
		for(int i=0; i<LAFInfo.length; i++) {
			supportedLAFPos.add(LAFInfo[i]);
			supportedLAF.add(LAFInfo[i].getName());
		}
		
	}//setSupportedLAF()
	
	private void setComboBoxes() {
		
		box1.addItem("Supported LAFs");
		box1.addItem("Default LAFs");
		
		for(int i=0; i<supportedLAF.size(); i++)
			box2.addItem(supportedLAF.get(i));
		
		this.getContentPane().setLayout(new GridLayout(2,1));
		this.getContentPane().add(box1);
		this.getContentPane().add(box2);
		
	}//setComboBoxes()
	
	private void setComboBoxListener() {
		
		box1.addItemListener(new java.awt.event.ItemListener() {
			public void itemStateChanged(java.awt.event.ItemEvent evt) {
				if(evt.getItem() == "Supported LAFs") {
					box2.removeAllItems();
					for(int i=0; i<supportedLAF.size(); i++)
						box2.addItem(supportedLAF.get(i));
				}
				if(evt.getItem() == "Default LAFs") {
					box2.removeAllItems();
					for(int i=0; i<defaultLAF.size(); i++)
						box2.addItem(defaultLAF.get(i));
				}
			}
		});
		
		box2.addItemListener(new java.awt.event.ItemListener() {
			
			public void itemStateChanged(java.awt.event.ItemEvent evt) {
				
				boolean check = false;
				
				for(int i=0; i<defaultLAF.size(); i++)
					if(evt.getItem() == defaultLAF.get(i)) {   
						setLookAndFeel(defaultLAFPos.get(i).toString(), defaultLAF.get(i).toString());
						check = true;
					}
				if(check == false)
					for(int i=0; i<supportedLAF.size(); i++)
						if(evt.getItem() == supportedLAF.get(i))    
							setLookAndFeel(supportedLAFPos.get(i).toString(), supportedLAF.get(i).toString());
				
			}
			
		});
		
	}//setComboBoxListener()
	
	private void setLookAndFeel(String laf, String lafName) {
		
		try{
			UIManager.setLookAndFeel(laf);
			for(int i=0; i<components.size(); i++)
				javax.swing.SwingUtilities.updateComponentTreeUI((Component)components.get(i));
			
		}
		catch(Exception ex){
			JOptionPane.showMessageDialog(new JFrame(), 
					"LookAndFeel: " + lafName + "\n" + 
					"not supported on this plattform.",
					"could'nt load look and feel",
					JOptionPane.INFORMATION_MESSAGE);
		}
		
	}//setLookAndFeel(String laf, String lafName)
}//class LookAndFeelFrame
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2004, 11:41 Nach oben    #8
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

Ich versteh das nicht ganz was ihr da macht.

Normalerweise hat doch eine App eine sehr beschränkte Anzahl Toplevel-Widgets, also JFrames/Frames.

Es reicht doch vollkommen, wenn du Referenzen auf all diese hast und dann für jedes JFrame einfach über alle ChildWidgets iterierst:
Code:
JFrame frame =...

for (i = 0; i < frame.getComponentCount(); i++) {
   javax.swing.SwingUtilities.updateComponentTreeUI(frame.getComponent(i)); 
}
Oder hab ich das jetzt was falsch verstanden?

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2004, 11:57 Nach oben    #9
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 432
Standard

Hi,

das war mir nun schon klar. Ich habe nun eine Klasse gebaut, welche mir erlaubt, während der Programmierphase das LAF "schön" zu ändern (um zu schauen, wie es sonst aussieht).

Vielleicht sollte ich noch Component im Konstruktor ändern
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PgsLookAndFeel - LookAndFeel für Swing pago Projekte unserer Mitglieder 7 23.04.2008 21:02
setDefaultLookAndFeelDecorated für JInternalFrame Sayang Desktop-Applikationen und Grafik 6 07.06.2006 09:17
[Swing] Eigenes LookAndFeel erstellen? javra Desktop-Applikationen und Grafik 3 06.03.2006 19:54
NetBeans 5.0 LookAndFeel anpassen eyeless Tools, Server, Betriebssysteme 3 15.12.2005 14:39
Euer lieblings LookAndFeel pago Desktop-Applikationen und Grafik 1 02.07.2005 05:46


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:59 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45