Methoden in Rescources speichern

MatzeTechnology

Neues Mitglied
Hey JavaForum,

ich arbeite momentan an einem größeren Programm welches auf einem eigenen UserInterface basiert, welches verschiedene UI-Themes unterstützen soll.
Ich habe leider keine Ahnung wie ich verschiedene werte für unterschiedliche Themen hinterlege.
Mitlerweile habe ich von dem ResourcesBundle gehört, dies ist aber soweit ich das gesehen habe nur für die Unterstützung verschiedener Sprachen geeignet da man nur Strings ablegen kann.
Es wäre zwar noch möglich Farben zu einem String zu konvertieren und wieder zurück aber das ist doch ein wenig unschön.

Ein weiteres und das Hauptproblem ist, dass in dem "WhiteTheme" der Hintergrund eines Fensters mit einer Textur gezeichnet wird. Im "BlackTheme" soll der Hintergrund aber nur mit einer Farbe gefüllt werden.
Für den Hintergrund brauche ich also eine Methode, welche Textur lädt und zeichnet.
Tja, wie bekomme ich jetzt Methoden abgespeichert und kann sie bequem wechseln?

Ein Ablauf beispiel:

Als Theme wird das BlackTheme gesetzt;
Ein Fenster (F1) wird geöffnet, all seine unter Components sollen auch BlackTheme sein;
Das Theme wird auf WhiteTheme gesetzt;
Ein weiteres Fenster (F2) wird geöffnet (all seine unter Components sollen auch WhiteTheme sein)
Nun wird interaktiv vom User ein Button in F1 gedrückt der ein neues Fenster öffnet. Da F1 im BlackTheme ist soll das neue Fenster, und all seine unter Components :), natürlich auch im BlackTheme sein.

So, hier ist mein Wunsch, stürzt euch darauf :)
Ich hoffe es ist soweit einigermaßen verständlich. Wie du dieses Problem nun löst ist vollkommen dir überlassen.
Also Zusatz Information noch: das gesamte UI basiert auf Swing (/AWT)

Sollte es bereits eine Lösung im Internet geben oder auch eine von Java direkt und ich war einfach zu schlecht beim googlen, dann fallt ruhig über mich her, aber ich habe wirklich nichts gefunden.

Ich bedanke mich im voraus für jede Antwort oder jeden google hinweiß wonach ich suchen sollte.
Viele Grüße
Matze
 

diggaa1984

Top Contributor
Was spricht dagegen den Theme als String abzuspeichern und einfach für jeden Theme ne entsprechende Klasse bereitzuhalten?
Du kannst natürlich auch über Interfaces und Reflection arbeiten und dynamisch nach vorhandenen Ressourcen suchen, aber wäre glaube ich unnötig kompliziert.
 

turtle

Top Contributor
Ein weiteres und das Hauptproblem ist, dass in dem "WhiteTheme" der Hintergrund eines Fensters mit einer Textur gezeichnet wird. Im "BlackTheme" soll der Hintergrund aber nur mit einer Farbe gefüllt werden.
Für den Hintergrund brauche ich also eine Methode, welche Textur lädt und zeichnet.
Tja, wie bekomme ich jetzt Methoden abgespeichert und kann sie bequem wechseln?

Wie diggaa1984 bereits richtig anmerkte, würde ich dies gar nicht in Properties hinterlegen, sondern der Code muss alles (richtig) auflösen. Ich würde nur keine Strings nehmen ;)

Nehmen wir an es gibt zwei verschiedene Themes:
Code:
class WhiteThemePanel extends JPanel implements ThemeWechsel;
class BlackThemePanel extends JPanel implements ThemeWechsel;
Also "weiss" WhiteThemePanel, das es den Hintergrund mit einer Textur malen soll. Alle weiteren Panels, die geöffnet werden können, muss es dann ebenfalls in White|Black-Ausführungen geben.

Gemeinsames Verhalten kannst du über das Interface ThemeWechsel ermöglichen, wobei ich nicht weiss, was da wirklich drin sein könnte.

Bleibt noch die Konfiguration des Panels. Hier kannst du den Klassennamen in eine Property schreiben und dein Code instanziert die richtige Klasse (via Reflection)
Code:
HauptPanel=my.package.Main.Panel.WhiteThemePanel
 

diggaa1984

Top Contributor
Ich würde nur keine Strings nehmen [/CODE]

Mir ging es da eher um eine Standard-Theme-Setting was ausserhalb definiert werden könnte, wenn der User die Freiheit haben soll. Ich weiss ja nicht ob bereits properties genutzt werden oder nich, wäre ja ein leichtes dort noch derartiges hineinzubauen. Die jeweiligen Eigenschaften, Farbwerte etc. pp haben da natürlich nichts zu suchen.
 

MatzeTechnology

Neues Mitglied
Leider bin ich mir momentan nicht ganz sicher ob ich verstehe was ihr meint... Ich poste mal meine aktuelle Lösung und ihr könnt dann dazu vllt nochmal Stellung nehmen, bzw sie verbessern.

Ich habe eine Klasse DWindow, welche von JWindow erbt. Diese klasse ist in der Lage mir ein "schönes" fenster auf den bildschrim zu zaubern. DWindow hat eine Instanzvariable userInterfaceTheme.

Hier die beiden wichtigen Klassen:

Java:
package UserInterface.Themes;

public class UserInterfaceTheme {

	public static UserInterfaceTheme actualTheme = new BlackTheme();

	public WindowTheme windowTheme;

	public abstract class WindowTheme {

		public abstract void paintBackground(Graphics g, Rectangle rect);

		public void paintBackground(Graphics g, Component comp) {
			this.paintBackground(g,
					new Rectangle(new Point(0, 0), comp.getSize()));
		}
        public abstract int getPadding();

	}

}

Java:
package UserInterface.Themes;

public class BlackTheme extends UserInterfaceTheme {

	public BlackTheme() {
		
		windowTheme = new WindowTheme() {
			
			@Override
			public void paintBackground(Graphics g, Rectangle rect) {
				Graphics2D g2 = (Graphics2D) g;
				g2.addRenderingHints(new RenderingHints(
						RenderingHints.KEY_ANTIALIASING,
						RenderingHints.VALUE_ANTIALIAS_ON));
				g2.setColor(Color.gray);
				g2.fill(rect); 
			}

			@Override
			public int getPadding() {
				return 4;
			}

		};

	}

}

Im Konstruktor von DWindow steht nun: this.userInterfaceTheme = UserInterfaceTheme.actualTheme;
so kann ich bevor ich das window erstelle diese statische variable einfach anpassen, die information welches theme genutzt werden soll steht dann für jedes folgend erstellte UI-Element zur verfügung, jedes UI-Element setzt sein Theme dann beim initialisieren.

Ich sehe noch ein paar dinge die mir nicht besonders gefallen:
1.Ich muss für jeden simplen integer wert der irgendeinen padding/margin darstellt eine methode verwenden, finde ich persönlich umständlich, geht das einfacher? aber damit könnte ich mcih abfinden denke ich

2.Wenn ich erst ein Fenster des Whitethemes erstelle und dann eines des BlackThemes findet sich im actualUserInterfaceTheme ein BlackTheme wieder, ich müsste also bevor ich einen neuen Component dynamisch initialisiere das actualUserInterfaceTheme überprüfen...
Ich sehe aber auch keinen anderen weg, mir fällt momentan kein weg ein wie ein Kind-Component eines JPanels oder ein Fenster, welches aus einem anderen heraus erzeugt wird, herausfinden soll wo es herkommt bzw was denn das Mutter-Objekt ist/für ein Theme hat...

Bei der ersten Entwicklung dieses Konzepts habe ich mich ein wenig an den AndroidSystem mit der R Klasse orientiert, da ich das eigentlich ganz praktisch fand, wenn ich eine Farbe für mein DWindow einfach mit: UserInterfaceTheme.Window.backgroundColor aufrufen kann oder mit UserInterfaceTheme.Window.paintBackground(Graphics g);
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
Encera Unterschied zweier "toString"-Methoden Allgemeine Java-Themen 1
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
B Arrays von Methoden möglich? Allgemeine Java-Themen 44
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
N abstracte klassen methoden Allgemeine Java-Themen 32
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
B Methoden Java Getter und Setter Methoden Allgemeine Java-Themen 9
Y Java Methoden unterschiedliche Zahlenreihen Allgemeine Java-Themen 2
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
F Sich automatisch aufrufende Java-Methoden Allgemeine Java-Themen 2
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
D Methoden Methoden anpassen und fehlende Funktionen hinzufügen Allgemeine Java-Themen 475
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
R Statistische Methoden (Mathematik) Aufgabe Allgemeine Java-Themen 9
X Brüche kürzen mittels Methoden und ggT Allgemeine Java-Themen 15
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
L mehrere Methoden Allgemeine Java-Themen 19
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
B StAX Parser - mehrere Methoden, ein XML Allgemeine Java-Themen 4
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
A Automatisches Methoden Laufzeiten logging? Allgemeine Java-Themen 7
M Quellcode von Java-Methoden Allgemeine Java-Themen 9
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
N HashMap und Methoden richtig einbinden Allgemeine Java-Themen 2
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
Q-bert Methoden Methoden in Java Allgemeine Java-Themen 13
D Methoden Java-Aufgabe Allgemeine Java-Themen 2
M Compiler-Fehler Methoden-Referenz Allgemeine Java-Themen 5
X Threads Externe Variablen in Run Methoden verändern Allgemeine Java-Themen 4
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
F Enum-werte als Methoden-Parameter übergeben Allgemeine Java-Themen 6
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
E OOP Objekte und Methoden Allgemeine Java-Themen 1
K Java ruft Methoden nicht der Reihe nach auf Allgemeine Java-Themen 14
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
T Java Array in Methoden Allgemeine Java-Themen 1
D Code für bereitgestellte Methoden Allgemeine Java-Themen 1
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
R Signatur von Methoden in eine Datei schreiben? Allgemeine Java-Themen 4
A Methoden verändern Allgemeine Java-Themen 12
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
J Best Practice Testen von protected Methoden Allgemeine Java-Themen 7
L Methoden "Schiffe versenken" Quellcode in Methoden umwandeln Allgemeine Java-Themen 6
G Matrix reduzieren zwei Methoden Allgemeine Java-Themen 2
Sogomn Best Practice "Doppelte" Methoden Allgemeine Java-Themen 3
Paul15 String Methoden Allgemeine Java-Themen 7
G Methoden BMI -Wert Aufgabe(Methoden) Allgemeine Java-Themen 4
F Testen von Methoden Allgemeine Java-Themen 3
S "Vererben" statischer Felder/Methoden Allgemeine Java-Themen 4
F Methoden in der Enumeration Klasse Allgemeine Java-Themen 1
S Methoden ohne Methodenkopf ?! Allgemeine Java-Themen 5
T Überschreiben von Methoden Allgemeine Java-Themen 6
M Methoden werden in falscher Reihenfolge bearbeitet Allgemeine Java-Themen 10
S Methoden Methoden überschreiben Allgemeine Java-Themen 3
N Threads statische Methoden in Threads Allgemeine Java-Themen 5
O Java-Obfuscator, welcher einzelne Methoden, Klassen und Ordnerstrukturen ausnehmen kann. Allgemeine Java-Themen 1
A also definition von klassen und string methoden und algorithmik Allgemeine Java-Themen 13
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
S Methoden Frage Allgemeine Java-Themen 2
R Wie kann man diese Methoden in arrays etablieren? Allgemeine Java-Themen 8
G Synchronisation nicht statischer Methoden Allgemeine Java-Themen 4
A Vererbung finale Methoden überschreiben Allgemeine Java-Themen 24
A Methoden parallelisieren? Allgemeine Java-Themen 2
L Methoden methoden an generischen klassentyp anpassen Allgemeine Java-Themen 5
C Methoden Übernahme von standart nativen Methoden? Allgemeine Java-Themen 9
B Zusammenfassen verschiedener ähnlicher Methoden Allgemeine Java-Themen 8
K JNI: Methoden aus unterschiedlichen Threads aufrufen Allgemeine Java-Themen 3
P Unterschiedliche Clone- Methoden Allgemeine Java-Themen 5
MQue Spezialfrage Überschreiben von Methoden Allgemeine Java-Themen 14
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
MiMa Rekursive Methoden Allgemeine Java-Themen 3
S Programm das alle aufgerufenen Methoden ausgibt..? Allgemeine Java-Themen 6
F ListIterator (next & previous methoden) Allgemeine Java-Themen 5
W Frage zu Refactoring statischer Methoden Allgemeine Java-Themen 4
M Methoden/Klassen für andere Projekte Allgemeine Java-Themen 4
T Methoden per String-Namen aufrufen Allgemeine Java-Themen 2
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
M Methoden Static Methoden und Thread??? Allgemeine Java-Themen 4
A Methoden ohne Referenzen finden Allgemeine Java-Themen 9
turmaline OOP zwei gleiche Methoden mit kleinen Unterschieden Allgemeine Java-Themen 15
G JUnit Test Methoden in anderen Thread verlagern Allgemeine Java-Themen 4
K Auf Methoden der Runnable Klasse zugreifen Allgemeine Java-Themen 2
S Methoden Class.forName() >> Methoden - Reihenfolge Allgemeine Java-Themen 5
D Passende Name für Methoden finden Allgemeine Java-Themen 3
D Wann sollte ich statische Methoden und Variablen benutzen? Allgemeine Java-Themen 44
A Methoden laufen im Konstruktor, außerhalb allerdings nicht Allgemeine Java-Themen 2
M Generische Methoden mit Java und globale Variablen Allgemeine Java-Themen 9
GianaSisters ArrayList in Methoden übergeben Allgemeine Java-Themen 3
S static methoden Allgemeine Java-Themen 9
J coole Methoden Allgemeine Java-Themen 6
R Methoden in einem Thread unterschiedlich oft ausführen Allgemeine Java-Themen 4
A OOP: Überschreiben/Implementierung von Methoden Allgemeine Java-Themen 5
P Methoden und Werte Allgemeine Java-Themen 17
E Performace/Ausführungszeit von Methoden ermitteln Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben