swing Design und OOP

melmager

Erfahrenes Mitglied
Ich programmiere ja schon seit einem Jahr an meinem Projekt und wollte eigendlich intern nur ein paar Verbesserungen einbauen, allerdings bin ich mit der Bedien Oberfläche immer noch nicht zu frieden und bin drauf und dran meine Swing oberfläche zum zweiten Mal über den Haufen zu werfen.

Ich weiss ja nicht ob das Programm jemals fertig wird, aber in dem Fall ist ja der Weg das Ziel da ich ein Projekt brauche um ein Sprache zu lernen. In meinem Fall soll es ein Lernprogramm für Keyboardspieler werden.
Wie man die einzelene Swing elemente wie Buttons und Co. einsetzt habe ich schon mal drauf, was mir fehlt ist die Fähigkeit ein Gesamtentwurf zu machen.

Gibts da irgendwo eine lesenswerte Leküre zu Usability von Grafischen Oberflächen für Swing ?
(ich möchte ja die Programmoberfläche nicht 10 mal ändern bis es benutzbar ist :) )

Das Bild zeigt mal wie es im Moment aussieht: Oben habe ich ein JtabbedPane und unten (SplitPane) meine Noten die zu spielen sind.
Der Bereich ist mir zu klein - also brauche ich eine Möglichkeit das Fenster in abhängigkeit in der Grösse zu ändern.

Meine derzeitige Idee ist das ich die JtabbedPane auf das ganze Fenster anwende und die Noten Anzeige unten im entsprechenden Tabbed in der Grösse entsprechend anpasse. Da die Anzeige der Noten eh ein extends von einem JPanel ist sollte das kein Problem darstellen.
Ich bekomme also mehrere Tabbed Fenster in dem in unterschiedlicher Grösse mein Notenblatt dargestellt wird. (Schlagwort: dynamische änderung von Fensterelementen)

Nehme ich da für Jede Anzeige eine eigene Instanz von der Notenanzeige oder kann ich immer auf die gleiche zugreifen ?
Code:
jPanelBlattOut = new NotenBlatt(lied);
// die Zeile einmal 

jScrollPane1.setViewportView(jPanelBlattOut);
// und das in jedem Jtabbed Fenster

Ich habe eh massive Verständnissprobleme mit dem OOP Prinzip (ich denke immer noch zu sehr in der guten alten Pascal Schiene mit der ich mal vor Uhrzeiten angefangen habe zu programmieren ). Im Moment habe ich die gesamte swing Oberfläche in einer Classe, aber mein Bauch sagt mir das ich die Abteilung Noten Editor komplett auslagern sollte. Da gibts mir einfach zuviele Stellschrauben - im Moment ist es ja so das 10 Bedienelemente für den Editor zuständig währen und das ist mir erlich zu viel um da jede Action abzufangen und dann eine entsprechende Aktion in der zuständigen Classe aufzurufen. Also denke ich mir eine eigene Classe jPanel für den Editor ist besser - Wobei ich mich nun frage was entspricht mehr dem OOP prinzip:
Mainfenster -ruft auf- JpanelEditor der die Oberfläche erstellt und alle Events erledigt und dort rufe ich ruft dann die Function in der Classe Editor auf
oder fasse ich die Classe EditorJPanel und Ausführung komplett zusammen ?
Sprich ich weiss immer noch nicht wo ich bei den Classen die Trennungen machen sollte - was fasst man zusammen, was sollte besser getrennt werden ,auch wegen Übersichlichkeit - den Bogen habe ich echt noch nicht raus :-(.

Als kurz gefragt wann lagert man den Swingteil für ein Programmteil aus und wann ruft man einfach ein Function einer Classe auf ? Der gezeigte Reiter Lied ist genau so ein Grenzfall - da denke ich bleibe ich dabei das ich bei der Action vom Liedname das eingegebne einfach an Lied.setName() weiterreiche.
>Wie handhabt ihr sowas ?
 

Anhänge

  • Bildschirmfoto10.png
    Bildschirmfoto10.png
    44,3 KB · Aufrufe: 30

melmager

Erfahrenes Mitglied
Über noch etwas grüble ich nach
Vorgehensweise beim Filechooser.
mein Programm soll merhrere Dateiarten unterstützen - jetzt kann man natürlich für jeden FileTyp ein eigenen Menüeintag machen : Open Text, Open Midi, Open XML - und dat gleiche für speichern
im Moment mache ich es so das ich nur Open und Save habe und dann im Filechooser ermitle welches File geöffnet wird, um so die entsprechendes Function in der entsprechend zuständige Classe aufzurufen.

Ich glaube darüber kann man auch trefflich streiten - Auswahl des FileTyps über Menu oder erst im Filechooser oder doch nicht ?