Strukturieren von GUIs

Status
Nicht offen für weitere Antworten.

Ocean-Driver

Bekanntes Mitglied
Hallo,

Ich bin gerade dabei mir Wissen in der GUI-Programmierung anzueignen, wobei ich da jedoch leider noch garnicht durchblicke wie ich eine GUI gut strukturiere. Deswegen hätte ich ein paar Fragen an euch:


1) Baut ihr für jedes Fenster eine eigene Klasse?Öffnet ihr die einfach, indem ihr die Fenster initialisiert? (Sprich: JFrame Subwin = new JFrame();) Und schließst ihr die auch, indem ihr im Fenster wo dieses Fenster geöffnet wurde das Objekt gleich null setzt? (Sprich: Main.Subwin = null;) um auch das mehrfache öffnen zu verhindern?

2) Wie baut ihr die Oberfläche gut auf?Ich hab schon viel von GUI-Editoren gelesen, einige schwören drauf andere meinen die produzieren nur scheisse.Ich will aufjedenfall mir erstmal die Grundlagen "manuell" aneignen. Doch wenn ich den Code "kann", würde ich gern auf einen grafischen 'Bauer' umsteigen. Was ist da für nicht-kommerzielle Anwendungen umsonst gut?
Und dann noch eine technische Frage: Muss ich den Listener so nennen, den ich mir vererben lasse?Kann ich nicht einfach einen Listener programmieren und den so nennen wie ich will?

3) Baut ihr alle Listener in eine Extra Klasse / in ein extra Package oder packt ihr direkt unter die Buttons?(Also als anonyme Klasse)


Das wars erstmal. Ich bedanke mich schonmal für eure antworten.


gruß
Ocean-Driver
 

dieta

Top Contributor
ICh schreib nur hobbymäßig Java, also nimm mich bitte nicht als Maßstab.
Meine Vorgehensweisen sind:
Fenster, die der User selbst öffnet, werden direkt vor dem Öffnen initialisiert. Die Fenster oder Panels, die in sie kommen liegen wegen der Übersichtlichkeit jeweils in einer eigenen Klasse vor.
Vom user geöffnete Fenster werden mit setVisible(false) geschlossen damit die eingegebenen Werte erhalten bleiben und die evtl. vorhandene Ladezeit beim nächsten Mal verkürzt wird.
Als GUI-Editor finde ich NetBeans ganz gut, das sit aber sehr stark Geschmacks- und Glaubenssache.
Listener baue ich immer in anonyme Klassen oder in die Fenster-Klasse ein, das aber eher aus Bequemlichkeit, weil ich hier schön auf die Werte der Klasse zugreifen kann.
 

Ocean-Driver

Bekanntes Mitglied
Ist das unsichtbar machen, nicht schlecht weil die Fenster im Hintergrund noch aktiv sind?
Würd vieleicht noch jemand posten, der das ganze auch auffer Arbeit benutzt?
Aber schonmal danke für deine Antwort!
 

dieta

Top Contributor
Wie "noch aktiv"?
Die Ressourcen werden weiterhin belegt, bis der GC sie freiräumt. Threads für dieses Fenster muss man natürlich anhalten.
 

Wildcard

Top Contributor
Sobald ein Fenster nicht mehr benötigt wird (auch in der Zukunft nicht), müssen die grafischen Resourcem mit dispose freigegeben werden.
Baut ihr für jedes Fenster eine eigene Klasse?
Eine Klasse pro Fenster ist absolutes Minimum. JFrame sollte es dabei natürlich nur einen geben, der Rest ist mit Dialogen zu erledigen.
Oft bietet sich eine abstrakte Oberklasse für Dialoge an, die für ein einheitliches Design sorgen.
Der Content wird dann in konkreten Implementierungen umgesetzt. Ein solcher Dialog/Frame kann daher aus sehr vielen Klassen bestehen, je nachdem wie flexibel die Sache werden soll.
Stell dir zum Beispiel einen Preferences Dialog vor, in den sich zusätzliche Module einklinken können.
 

Ocean-Driver

Bekanntes Mitglied
Hi,

Wie meinst du dass, nurnoch mit Dialogen?Jedes Fenster erbt ja von JFrame. In den Fenstern initialisiere und erzeuge ich die ganzen Buttons, TextFields, Panels..
Geh ich das komplett falsch an?Hast du vieleicht mal irgendeinen Sourcecode an dem ich mich mal orientieren könnte?
 

Ocean-Driver

Bekanntes Mitglied
Ok, dann war mein Ansatz bisher falsch. Ich werd wohl nochmehr lesen müssen ;)

//Edit:
Ich h ab mir jetzt mal in "Java ist auch eine Insel" was über Dialoge angelesen. Aber Dialoge sind doch nicht neue Fenster,oder?

Wenn ich zum Beispiel einen Button habe, der ein neues Fenster öffnet - reicht da doch ein einfacher Dialog nicht aus,oder?
 
G

Gast

Gast
Doch, klar.

Der JDialog erbt doch genau wie der JFrame von JWindow, und der ist die Oberklasse für Fenster. Mit dem JDialog kannst du praktisch das gleiche machen wie mit dem JFrame: JPanels hinzufügen und co.
 

JavaTom

Mitglied
Ocean-Driver hat gesagt.:
Wie baut ihr die Oberfläche gut auf?Ich hab schon viel von GUI-Editoren gelesen, einige schwören drauf andere meinen die produzieren nur scheisse.Ich will aufjedenfall mir erstmal die Grundlagen "manuell" aneignen. Doch wenn ich den Code "kann", würde ich gern auf einen grafischen 'Bauer' umsteigen. Was ist da für nicht-kommerzielle Anwendungen umsonst gut?

Versuchs mal mit den neuen Netbeans 6.0 habe sehr gute damit gemacht. Damit kann man selbst als Anfänger in relativ kurzer Zeit eine etwas Zusammen basteln.
Für Eclipse gibt es auch einige kostenlose Plugins.
 

Ocean-Driver

Bekanntes Mitglied
Hi,

NetBeans 6 hab ich mir mal runtergeladen. Nur, wie baue ich am besten die Events?
Ich hab jetzt ein Frame erstellt und da einige JButton angelegt, die verschiedene JDialogs öffnen soll.
Für Buttons ja einfach nen 'mouseClicked'-Event bauen,oder?
Also: Rechtsklick --> Events --> Mouse --> mouseClicked

Nur, wie öffne ich dann das jDialog?
 

MichiM

Bekanntes Mitglied
an die erfahrenen Swing-Designer hier:

Gibt es einen Swing-GUI-Editor, bei dem man nicht mit dem ständigen Risiko leben muss, dass einem bei einem Klick das ganze Layout (außer per Restore eines Backups) unwiderbringlich verwüstet wird?

Arbeite noch mit NetBeans 5.5 und ich denk, es ist der Matisse, mit dem man mit viel Geduld schon was hinbekommt, allerdings, wie gesagt: Ein falscher Klick und alles ist dahin, keine Chance mit Ctrl-Z. Auf mich wirkt das Ganze im besten Falle sehr undurchsichtig, wenn nicht unausgereift und fehlerhaft.

Komponentengefüge in übergeordnete Container zu verschieben, was ab und zu sein muss, ist da ein Graus...

Über NetBeans 6 hab ich allerdings bisher auch nicht viel Gutes gelesen. Von der Idee ganz gut, praktisch allerdings zu kompliziert, heißt es. Kann ich so weit nachvollziehen. :wink:


Ich möchte im Wesentlichen mit statischen Layouts arbeiten. Ich stell mir was ähnlich wie Visual Studio vor, da geht zumindest das Zusammenklicken gut und stabil in kurzer Zeit, allerdings sollte es eben was für Swing und nicht .NET sein. :wink:


Welchen GUI-Builder könnt Ihr für Swing empfehlen?
 

MichiM

Bekanntes Mitglied
Naja, ein bisschen ein Preis ist schon ok, sag ich mal. :wink:

Wichtig wär mir halt, dass man vernünftig, ohne ständige pieksende Ärgernisse, damit arbeiten kann.


Gibt es da zur Zeit schon was Empfehlenswertes für Swing?



(Für JSF gibt es ja offenbar auch noch wenig GUI-Klick-Unterstützung, NetBeans 6 hat da ja erstmals was dabei, werd ich mir mal anschauen. Mir kommt es so vor, als gäbs mitunter deswegen so wenig Java-GUI-Software, weil es so mühselig ist, eine gescheite Oberfläche zu erstellen. Woran liegt denn das? Bei der Konkurrenz - .NET, Delphi, usw. - gehts doch auch und zwar schon lang. Liegts an der Swing-Architektur, den ganzen Layout-Typen und Komponentenabhängigkeiten...? Naja. Schade irgendwie. :wink: )
 

anfänger15

Bekanntes Mitglied
Wildcard hat gesagt.:
Sobald ein Fenster nicht mehr benötigt wird (auch in der Zukunft nicht), müssen die grafischen Resourcem mit dispose freigegeben werden.

Ist das nicht nur bei AWT Komponenten der Fall oder muss man das auch bei Swing machen?
 

anfänger15

Bekanntes Mitglied
Ja, das schon aber wenn der JFrame geschlossen wird wird normalerweise ja auch das komplette Programm beendet und die Ressourcen sollten dann sowieso freigegeben werden. Mir ging es eigentlich darum ob man dispose auch bei z.B. JButton aufrufen muss.

Nach logischen nachdenken ist mir aber klar geworden, dass Swing gezeichnet wird und somit keine Ressourcen freigegeben werden müssen. Somit denke ich ist dies nicht nötig, lasse mich aber gerne eines besseren belehren.

danke
 

Ocean-Driver

Bekanntes Mitglied
Hi,

Also wenn ich ein Unterfenster eines Programmes aufhab, brauch ich es nicht mit 'Fenster = null' freigeben?

Also, wenn ich etwas schließe, reicht es die sichtbarkeit auf false zu setzen? Wird dann auch keine Perfomance mehr verbraucht?
Ich will ja schließlich keine schlechten Programme entwickeln. :)
 

HLX

Top Contributor
Gute grafische Benutzeroberflächen zeichnen sich durch benutzerfreundlichkeit und nicht durch Speicherersparnis aus.

Ist dir bei verschiedenen Anwendungen schonmal aufgefallen, dass ein von dir geschlossenes Fenster beim nächsten Öffnen den letzten Zustand wieder herstellt, in dem z.B. die enthaltenen Komponenten die gleiche Größe haben, wie von dir zuvor eingestellt? Das liegt daran, dass das Fenster im Hintergrund noch in seiner zuletzt eingestellten Form vorhanden war - der benutzerfreundlichkeit wegen.

Im Übrigen ist es auch nicht gerade performant ein Fenster jedesmal neu zu initialisieren.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
R Welchen Layout Manager/ Wie strukturieren? AWT, Swing, JavaFX & SWT 14
M Java Gui Strukturieren AWT, Swing, JavaFX & SWT 4
M Swing Java Applikation in MVC gut strukturieren AWT, Swing, JavaFX & SWT 14
S JTable organisieren / strukturieren AWT, Swing, JavaFX & SWT 8
J Objekte von 2 GUIs zusammenfassen AWT, Swing, JavaFX & SWT 2
M Zeichenketten in GUIs (toString() vermeiden?) AWT, Swing, JavaFX & SWT 4
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
V Guis erstellen mit FXML und javaFX gemischt AWT, Swing, JavaFX & SWT 5
U Swing Fragen bezüglich Multithreaded GUIs (Grundlagen): AWT, Swing, JavaFX & SWT 3
J LookAndFeel Java-GUIS AWT, Swing, JavaFX & SWT 19
2 Werde Java GUIs immer noch mit dem in die Jahre gekommen Swing gemacht? AWT, Swing, JavaFX & SWT 12
newcron Suche die hässlichsten Swing GUIs AWT, Swing, JavaFX & SWT 4
P seltsame Performance Probleme bei 2 Guis abhängig vom Aufruf AWT, Swing, JavaFX & SWT 8
2 Schönere GUIs? AWT, Swing, JavaFX & SWT 9
P richtige "Architektur" mit GUIs AWT, Swing, JavaFX & SWT 2
M Swing bremst GUIs von allen Programmen aus AWT, Swing, JavaFX & SWT 8
K UNICODE ZEICHEN in den SWing-GUIs AWT, Swing, JavaFX & SWT 4
K welches package muss ich angeben um GUIs zu erstellen? AWT, Swing, JavaFX & SWT 5
A Automatisierter Test von Swing GUIs AWT, Swing, JavaFX & SWT 3
M Wie machen die diese GUIs? AWT, Swing, JavaFX & SWT 2
G GUIs miteinander verknüpfen AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben