Swing Regeln für GUI-Programme

  • Themenstarter Themenstarter Lorun
  • Beginndatum Beginndatum
L

Lorun

Gast
Hallo zusammen.

Vorab : Ich arbeite mit dem jdk6 update 21 und Eclipse. Ich bin noch ein rechter Neuling in Sachen Java - zumindest was GUI-Programmierung angeht.

Und nun zu meiner eigentlichen Frage:

Ich arbeite zur Zeit an einem Programm zur Projektverwaltung in dem Daten erfasst, gespeichert, geladen und teilweise ausgewertet werden können.

Nun habe ich eine Singleton-Klasse "MainWindow" in der mein Hauptfenster generiert wird. Hier wird der Mainframe einige Elemente und ein JTabbedPane erzeugt. Die Inhalte der Tabs habe ich in andere Klassen ausgelagert. Also existiert zum Beispiel ein Reiter "Projektdaten" in dem ein JPanel mit Eingabefeldern usw angezeigt wird. Das ganze sieht folgendermaßen aus

Java:
//Definition des Projekt-Tabs
JPanel projectPanel = ProjectPanel.createProjectPanel();
tabbedPane.addTab("Projekt", projectPanel);

Dieser Codeschnippsel wird in meiner MainWindow Klasse aufgerufen. Nun stellt sich mir die Frage, wie ich die Daten aus dem "externen" JPanel bekomme. Also wie ich auf die Daten zugreifen kann, die in den JTextField-Komponenten in projectPanel stehen. Und hier kommt die Regel-Frage ins Spiel.
Macht es Sinn, solche "GUI-Zeichnungen" in Klassen auszulagern, oder sollte ich alle Elemente in einer einzelnen Klasse "zeichnen", damit ich mir das Übertragen von Daten aus der einen in eine andere Klasse sparen kann, dafür aber etwas an Übersichtlichkeit verliere.

Ich hoffe jemand versteht mein Problem und kann mir einen Tipp geben 🙂

Gruß,
Stefan
 
Hi

Ich würde auf keinen Fall alles in eine Klasse packen.

Wenn die Daten auf die du zugreifen möchtest mit dem Schlüsselwort "protected" versiehst oder dir entsprechene getter/setter - Methoden mit "protected" erstellst ,ist ein Zugriff im gesamten Package möglich.Dann können deine "übergeordneten" GuiElemente auf die "untergeordneten" zugreifen.Das sollte das Problem lösen.
 
Für package-Sichtbarkeit gibt man GAR keinen modifizierer an (also weder public noch private noch protected).

Ansonsten... was soll das mit dem Singleton da...?
 
Für package-Sichtbarkeit gibt man GAR keinen modifizierer an (also weder public noch private noch protected).

Ansonsten... was soll das mit dem Singleton da...?

Stimmt.Da hatte ich mich gerade geirrt.

Warum denn kein Singelton ? Ein Mainwindow existiert doch nur einmal sonst wäre es ja kein MainWindow,oder ?
 
Was mir gerade einfällt.Man könnte eine Klasse mit statischen Methoden machen ,in der JTextField reinschreibt und das Maionwindow liest
 
Verstehe ich das richtig, dass meine ProjectPanel Klasse dann in etwa so aussehen sollte :

Java:
public class ProjectPanel {
	
static JTextField feld1;
usw...
/**
 * Generiert einen Panel mit fest vorgegebenem Inhalt für den Mainframe.
* @return den fertigen Panel
 */
public static JPanel createProjectPanel() {

}
}

Und ich dann via ProjectPanel.feld1 auf die Daten zugreife?

Ist das Singleton-Muster nicht für genau solche Situationen? Damit ist gewährleistet, dass nur ein MainWindow erzeugt wird. Oder irre ich mich?
 
Nicht ganz .Ich dachte an eine zusätzliche Klasse

Java:
public class GuiManager{

private static String textFieldString;

public static String getTextFieldString(){

return textFieldString;

}

public static void setTextFieldString(String string){

this.textfieldString = string;

}

}


und dann in der Klasse wo JTextfield ist:

Java:
GuiManager.setTextField(getText());

und in der WindowManager Klasse:

Java:
GuiManager.getTextField();
 
Ist das Singleton-Muster nicht für genau solche Situationen?
Nein.

Die meisten Leute missbrauchen ein Singelton als globale Variable, am besten du vergisst das Singleton Muster ganz schnell wieder und instaziierst dein MainWindow nur ein einziges mal 😉
Kannst ja mal suchen, Singleton ist bis zum erbrechen diskutiert worden, hier im Forum aber auch im Internet.
Fazit: Am besten nicht nutzen
 
Ok - wieder was gelernt 🙂)

Das bedeutet jetzt also, dass ich in meiner GuiManager klasse einen Setter und einen Getter für jede Komponente brauche, die ich in meinem Programm verwende, oder lieg ich da schon wieder falsch?
 
Ok - wieder was gelernt 🙂)

Das bedeutet jetzt also, dass ich in meiner GuiManager klasse einen Setter und einen Getter für jede Komponente brauche, die ich in meinem Programm verwende, oder lieg ich da schon wieder falsch?

Man sollte es so machen.Eine "Quick&Dirty" Möglichkeit wäre auch die Variablen public zu machen und dann darauf direkt zuzugreifen mit den Punktoperator(Seperator) ,z.b GuiManager.textField
 

Zurück
Oben