Swing Komponenten auslagern auf separate Datei

BabySuna

Mitglied
Hallo zusammen

Ich hoffe ich bin in diesem Teil des Forums auch richtig. Mir liegt viel daran das mein Code funktioniert aber auch das er wartungsfreundlich bleibt.
Bei meiner Oberflächengestaltung möchte ich nicht alles in einer riesigen Datei stehen haben. Die Komponenten (Label, TextField usw.) kann ich die nicht in eine separate Datei packen? Dort könnte ich doch dann auch das weitere aussehen bestimmen (zB Hintergrundfarbe, Textfarbe usw). somit würde es auch überall im Programm gleich aussehen. Würde sich auch eine menge schreib Arbeit ersparen.
Geht das?
Wenn ja, bitte erklärt mir wie das geht.

Leg ich dazu eine neue Datei an.
Benenne sie Aussehen.java
Stelle ich dann in der Datei Aussehen.java eine neue public class Aussehen
und definiere ich dort dann alle meine Komponenten?
und rufe die dann über den klassennamen dann auf ?

Irgendwie muss ich doch diesen doofen Knoten zum Platzen bekommen.

Liebe Grüßen
 
K

kneitzel

Gast
Als aller erstes: Das, was Du da machen willst, ist wirklich gut und löblich. Es gibt aber hier viele Wege, mit denen Du zum Ziel kommen kannst:

a) Ein Ansatz kann relativ trivial sein: Du hast an mehreren Stellen identischen Code. Also etwas wie:
- Erstelle eine Instanz von A.
- Setze Textfarbe
- Setze Hintergrundfarbe
- mache sonst noch etwas mit A.
Eine direkte Möglichkeit wäre nun, dies in eine Methode zu verschieben:

public static A createa() {
- Erstelle eine Instanz von A.
- Setze Textfarbe
- Setze Hintergrundfarbe
- mache sonst noch etwas mit A.
- gib A zurück
}

Und diese Methode rufst Du dann nur noch auf.

Das wäre dann vom Konzept her eine Factory Methode. Ist aber sehr unschön, da diese jetzt z.B. statisch ist, d.h. sie passt nicht wirklich in eine objektorientierte Welt.

b) Du kannst eigene Klassen erstellen. Statt einem JLabel nutzt Du dann die Klasse MyLabel, welche von JLabel erbt. In der Klasse kannst Du dann alles machen.

Das hört sich erst einmal gut an, aber unter dem Strich erhältst Du eine Klasse MyLabel, die eigentlich vom Verhalten her komplett ein JLabel ist - nur im Konstruktor werden 3 Default Werte anders gesetzt ... Das macht nicht unbedingt Sinn. Sobald man hier aber mehr machen möchte, dann kann das sehr wohl eine Lösung sein.

c) Eine Mischung aus Beidem. Statt statischen Factory-Methoden hast Du evtl. eine Factory Klasse. Die kann dann z.B, eine Konfiguration laden (a.la. css oder so ...) und dann wird diese Factory benutzt um UIs zu erzeugen. Das kann dann auch richtig weit gehen. (Und dann ggf. mit abgeleiteten Klassen. Die neue Label Klasse hat dann halt eigenschaften für MouseOver ... oder ein Hilfetext, der eingeblendet wird, denn die Maus x Sekunden drüber bleibt oder oder oder ... Also zum einen Klassenstrukturen für die Factory (nix mehr mit statischen Methoden) und da wo neues Verhalten notwendig ist, dann ggf. auch neue Klassen.
 

BabySuna

Mitglied
Also wenn ich das jetzt richtig verstehe, kann ich eine CSS-Datei erstellen wo ich das aussehen definiere. Diese lade ich dann mit der import-Anweisung ein und kann dann drauf zugreifen. Und ansonsten über Klassen die dann als nichts weiteres dienen als ein Baugerüst?!

bei meinem Projekt nervt es mich immer zu scrollen um zu sehen wie die Namen der Objekte (Label, Textfeld usw) waren. Daher würde ich diese gerne in einer anderen Datei haben wo nur die Komponenten mit den Namen drin sind.
Oder ist das too much Ordnung?
 

Barista

Top Contributor
b) Du kannst eigene Klassen erstellen. Statt einem JLabel nutzt Du dann die Klasse MyLabel, welche von JLabel erbt. In der Klasse kannst Du dann alles machen.
Mein letztes Swing-Programm habe ich 2008 geschrieben.

Dort habe ich die Lösung mit der Vererbung, wie von Dir beschrieben, benutzt.

Wenn man allein arbeitet, kann man auch darauf verzichten, eine Factory zu verwenden, wen juckt es.

Als Wartungshölle habe ich die Listener(Observer)-Arbeitsweise empfunden.

Ist wie JavaScript (ohne Klassen), alles wird zur Laufzeit zusammen gebaut.

Prinzipiell (auf Ebene Maschinencode) wird alles zur Laufzeit zusammen gebaut.

(Java-)Klassen wandeln das Zusammenbauen zur Laufzeit in Strukturen zur Compile-Zeit um.

Die Listener(Observer)-Arbeitsweise unterläuft die Strukturierung zur Compile-Zeit.

Deshalb finde ich die oft propagierte lose Kopplung ungünstig.
Die Flexibilität beim Zusammenstecken erkauft man sich durch das Absichern, das alles zusammenpasst mit Tests.
 

mihe7

Top Contributor
somit würde es auch überall im Programm gleich aussehen. Würde sich auch eine menge schreib Arbeit ersparen.
Geht das?
Ja, aber nicht per CSS, sondern über den UIManager. Willst Du z. B. die Schrift von allen Labels ändern: UIManager.put("Label.font", font);, wobei font die zu verwendende Font-Instanz ist.
 
K

kneitzel

Gast
Also das mit dem css sollte nur ein Beispiel sein, wie es prinzipiell aussehen könnte. Wie schon korrekt gesagt, unterstützt Swing dies nicht.
Wenn man sich aber etwas baut, dann kann man sich von gewissen vorhandenen Dingen aber inspirieren lassen.

Der UIManager ist super, wenn man eine Änderungen für alle Elemente gleich haben will. Problematisch wird es nur, wenn ein Control je nach Anwendung unterschiedlich sein soll. Also sozusagen in Abhängigkeit zu einem anderen Wert. (Also z.B. Wenn das JLabel zur Darstellung eines Fehlers verwendet wird, dann soll der Text fett und rot sein. Bezeichner vor Eingabefeldern sollen in schwarzer Farbe dargestellt werden, ....)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
P AWT Einzelne Komponenten zur Laufzeit austauschen? AWT, Swing, JavaFX & SWT 3
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
F Gebundene Eigenschaften bei Komponenten mit NetBeans verarbeiten AWT, Swing, JavaFX & SWT 3
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
P Gleichmäßige Anodnung von Komponenten im migLayout AWT, Swing, JavaFX & SWT 2
DaCrazyJavaExpert Swing Komponenten genauer anordnen. AWT, Swing, JavaFX & SWT 13
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
P Größe und Ausrichtung von Komponenten festlegen AWT, Swing, JavaFX & SWT 13
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
Neumi5694 LookAndFeel Look & Feel nicht angezeigter Komponenten ändern AWT, Swing, JavaFX & SWT 6
D JavaFX GUI Komponenten werden langsam bei größerer Datenmenge AWT, Swing, JavaFX & SWT 6
R Komponenten von JPanel bleiben unsichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Welche Komponenten vermisst ihr? Welche wären essenziell notwendig? AWT, Swing, JavaFX & SWT 8
M Datei mit Komponenten einbinden AWT, Swing, JavaFX & SWT 7
T SWT Externer zugrif auf SWT Komponenten AWT, Swing, JavaFX & SWT 3
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
J MouseOver bei Komponenten AWT, Swing, JavaFX & SWT 9
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
G Komponenten vergrößern sich nicht trotz Layoutmanager AWT, Swing, JavaFX & SWT 24
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
S BoxLayout: Anordnung der Komponenten links statt zentriert AWT, Swing, JavaFX & SWT 0
Bartertown JTable - Verschiedene Komponenten in einer Spalte unterbringen AWT, Swing, JavaFX & SWT 3
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
M Komponenten übereinander AWT, Swing, JavaFX & SWT 7
R Komponenten werden erst nach maximierung des Frames sichtbar (Linux) AWT, Swing, JavaFX & SWT 5
H Swing Getter für GUI-Komponenten AWT, Swing, JavaFX & SWT 3
B Komponenten in Fenster verdrängen sich untereinander AWT, Swing, JavaFX & SWT 6
N Komponenten übereinander AWT, Swing, JavaFX & SWT 3
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
M Swing Komponenten enablen? AWT, Swing, JavaFX & SWT 4
X Java Komponenten jeder Zeit hinzufügen können AWT, Swing, JavaFX & SWT 3
S View-Komponenten im Controller bekannt machen AWT, Swing, JavaFX & SWT 7
D Grafische Komponenten komplett neu aufbauen (Neukonstruktion) AWT, Swing, JavaFX & SWT 5
A AWT Komponenten in JavaFX einbetten AWT, Swing, JavaFX & SWT 9
M Swing Komponenten erscheinen beim darüberfahren? AWT, Swing, JavaFX & SWT 7
H Komponenten unmittelbar nach dem Ausführen teilweise unsichtbar AWT, Swing, JavaFX & SWT 3
K GUI in Komponenten aufteilen (MVC) AWT, Swing, JavaFX & SWT 2
W Funktionen, sowie aufruf einiger Komponenten AWT, Swing, JavaFX & SWT 4
J Alle Komponenten eines JFrames durchlaufen AWT, Swing, JavaFX & SWT 2
R Swing Komponenten bleiben bei Animation unsichtbar AWT, Swing, JavaFX & SWT 7
T Unter JPanel liegende Komponenten "totschalten" AWT, Swing, JavaFX & SWT 5
morphesus Swing Komponenten werden nicht angezeigt AWT, Swing, JavaFX & SWT 8
C Swing Reihenfolge der Initialisierung von Komponenten AWT, Swing, JavaFX & SWT 6
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 7
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 2
W Bildgröße automatisch an Komponenten anpassen AWT, Swing, JavaFX & SWT 3
TheWhiteShadow Swing Komponenten organisieren AWT, Swing, JavaFX & SWT 9
S Überlappung zweier Komponenten AWT, Swing, JavaFX & SWT 12
Z größe der komponenten bestimmen AWT, Swing, JavaFX & SWT 16
C GUI-Komponenten skalieren AWT, Swing, JavaFX & SWT 10
M Seltsames Problem mit Resize eines Fensters und seiner Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Komponenten verstecken AWT, Swing, JavaFX & SWT 4
X Swing Resizing der Komponenten innheralb eines Panels AWT, Swing, JavaFX & SWT 2
T Swing Font für alle Komponenten ändern AWT, Swing, JavaFX & SWT 2
S Problem mit Swing Komponenten AWT, Swing, JavaFX & SWT 11
A Swing Alle Komponenten auf JFrame ermitteln AWT, Swing, JavaFX & SWT 4
E LookAndFeel Eigene Komponenten mit Synth L&F stylen AWT, Swing, JavaFX & SWT 2
S Swing Frame und Klasse extends JPanel - Komponenten zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 18
S JButton und textfield.setText - Komponenten über-/verdecken sich AWT, Swing, JavaFX & SWT 15
M Komponenten übereinander prüfen AWT, Swing, JavaFX & SWT 3
W LayoutManager GridBag richtig nutzen - Komponenten richtig anordnen und automatisch vergrößern AWT, Swing, JavaFX & SWT 5
M Komponenten in anderer Reihenfolge anzeigen AWT, Swing, JavaFX & SWT 4
G swing Komponenten verrutschen ständig... AWT, Swing, JavaFX & SWT 6
D Mit GridBayLayout Komponenten anordnen AWT, Swing, JavaFX & SWT 6
N Window transparent, Komponenten nicht transparent AWT, Swing, JavaFX & SWT 11
R Farbänderung von Komponenten wird nicht wirksam AWT, Swing, JavaFX & SWT 7
P Swing Hierachie oder Reihenfolge von Komponenten AWT, Swing, JavaFX & SWT 5
T Sich überlappende Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Probleme beim Anzeigen der einzelnen Komponenten AWT, Swing, JavaFX & SWT 16
R Swing Komponenten klein angezeigt AWT, Swing, JavaFX & SWT 10
D Swing Swing Komponenten verschieben AWT, Swing, JavaFX & SWT 7
B Komponenten nach Skalierung nicht mehr ansprechbar AWT, Swing, JavaFX & SWT 9
Kr0e AWT Komponenten in JPanel AWT, Swing, JavaFX & SWT 6
JuliaOne Komponenten innerhalb eine JScrollpane werden auch ausserhalb davon gezeichnet! AWT, Swing, JavaFX & SWT 7
xehpuk Swing Komponenten werden durch setFont() winzig AWT, Swing, JavaFX & SWT 3
O Größe von Komponenten im JFrame manuell verändern AWT, Swing, JavaFX & SWT 2
H Komponenten anwendugsweit formatieren AWT, Swing, JavaFX & SWT 6
M Swing Komponenten mit fester Größe an Fensterrand(JFrame) AWT, Swing, JavaFX & SWT 2
A Komponenten zur Laufzeit entfernen AWT, Swing, JavaFX & SWT 3
Weiti Swing Animationen - Drehung aller Komponenten auf Knopfdruck AWT, Swing, JavaFX & SWT 12
P LayoutManager Komponenten einfügen (FlowLayout, BoxLayout) AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben