M
m.a.k.
Gast
Hallo zusammen.
Ich versuche mich gerade an meinem ersten "richtigen" Java-Programm und stoße dabei leider auf ungeahnte Schwierigkeiten.
Kurz eine Beschreibung was genau ich machen möchte: Ich will ein Programm programmieren, welches nachher als Application (also nicht als Applet) laufen soll. Dieses Programm soll über ein Hauptmenü verfügen, welches mehrere Buttons und eine Menüleiste enthält. Je nachdem, welcher Button geklickt wurde, soll eines von mehreren Fenstern aufgehen und das Hauptmenü solange ausgeblendet werden. Sobald man dieses Fenster schließt, soll dann zum Hauptmenü zurückgekehrt werden.
Nun scheitere ich allerdings leider schon an einer sinnvollen Klasseneinteilung für mein Programm. Ich würde gerne Daten und Ansicht so gut es geht trennen, nur leider bekomme ich das nicht richtig hin.
Ich habe mir gedacht, es wäre am sinnvollsten, für jedes Fenster eine eigene Frame Klasse mit zugehörigem Panel anzulegen, anstatt in ein und dem selben Frame einfach nur die Panels zu tauschen, weil alle meine Fenster eine unterschiedliche Größe haben werden.
Meine anfängliche Idee war folgende:
Ich erstelle für jedes Fenster in meinem Programm eine Panel-Klasse. Diese Klasse ist von JPanel abgeleitet und enthält dann sämtliche Komponenten des entsprechenden Fensters. Dann erstelle ich noch eine zugehörige Klasse, die von JFrame abgeleitet ist, und weise dieser als content pane das entsprechende Panel zu.
Dann habe ich allerdings schon das erste Problem: Um auf die Eingaben des Benutzers reagieren zu können, muss ich ja sowohl beim Panel (für die ganzen komponenten wie Buttons, Textfelder etc.) wie auch beim Frame (für die MenuBar) einen ActionListener implementieren. Dann hätte ich aber das Problem, dass meine Daten nicht in einer Klasse gebündelt sind, sondern dass das Panel einige Funktionen und Daten besitzt, die über seine Componenten aufgerufen bzw. verändert werden können, und das Frame besitzt wieder ein eigenes Paket an Daten und Funktionen.
Wie kriege ich es jetzt hin, dass meine Panel und meine Frame Klasse gescheit miteinander kommunizieren können? Oder geht das auf diesem Wege gar nicht und ich sollte ein Fenster komplett in einer Klasse bündeln und auf die Trennung von Panel-Klasse und Frame-Klasse verzichten?
Irgendwie fehlt mir da so der Einstiegspunkt. Ich habe mir zwar jetzt schon ne Menge Tutorials angelesen, aber bisher auch noch nichts gescheites über solche Mehr-Fenster-Anwendungen gefunden. Hoffe mir kann da jemand nen Rat geben, wie man es am besten macht.
Ein Verweis auf ein gescheites Tutorial wäre natürlich auch super
Und wo ich schon mal dabei bin, hätte ich direkt noch eine Frage:
Ich möchte mein Programm von Anfang an Multilingual schreiben, also mit Unterstützung für verschiedene Sprachen. Dazu wollte ich für jedes Panel ein ListRessourceBundle benutzen, welches die Texte für alle Componenten in der entsprechenden Sprache beinhaltet. Ein TextProvider soll mir dann die Beschriftung für jede Komponente liefern.
Mein Problem ist folgendes: Wenn ich die ListRessourceBundle-Klassen nicht in den Hauptpfad lege sondern in eines der Packages, dann werden sie nicht mehr gefunden und ich bekomme die Fehlermeldung
"Can't find bundle for base name MainMenu, locale de"
z.B. für meine Hauptmenü Klasse. Sobald ich die Datei zurück in den Hauptpfad schiebe, wird sie problemlos gefunden. Den Zugriff auf die Ressourcen mache ich wie folgt:
Ist daran irgendwas falsch oder muss ich sonst irgendwas beachten, wenn ich meine Ressourcen Dateien in ein Package packen möchte?
Danke schon mal im Vorraus.
Gruß
m.a.k.
Ich versuche mich gerade an meinem ersten "richtigen" Java-Programm und stoße dabei leider auf ungeahnte Schwierigkeiten.
Kurz eine Beschreibung was genau ich machen möchte: Ich will ein Programm programmieren, welches nachher als Application (also nicht als Applet) laufen soll. Dieses Programm soll über ein Hauptmenü verfügen, welches mehrere Buttons und eine Menüleiste enthält. Je nachdem, welcher Button geklickt wurde, soll eines von mehreren Fenstern aufgehen und das Hauptmenü solange ausgeblendet werden. Sobald man dieses Fenster schließt, soll dann zum Hauptmenü zurückgekehrt werden.
Nun scheitere ich allerdings leider schon an einer sinnvollen Klasseneinteilung für mein Programm. Ich würde gerne Daten und Ansicht so gut es geht trennen, nur leider bekomme ich das nicht richtig hin.
Ich habe mir gedacht, es wäre am sinnvollsten, für jedes Fenster eine eigene Frame Klasse mit zugehörigem Panel anzulegen, anstatt in ein und dem selben Frame einfach nur die Panels zu tauschen, weil alle meine Fenster eine unterschiedliche Größe haben werden.
Meine anfängliche Idee war folgende:
Ich erstelle für jedes Fenster in meinem Programm eine Panel-Klasse. Diese Klasse ist von JPanel abgeleitet und enthält dann sämtliche Komponenten des entsprechenden Fensters. Dann erstelle ich noch eine zugehörige Klasse, die von JFrame abgeleitet ist, und weise dieser als content pane das entsprechende Panel zu.
Dann habe ich allerdings schon das erste Problem: Um auf die Eingaben des Benutzers reagieren zu können, muss ich ja sowohl beim Panel (für die ganzen komponenten wie Buttons, Textfelder etc.) wie auch beim Frame (für die MenuBar) einen ActionListener implementieren. Dann hätte ich aber das Problem, dass meine Daten nicht in einer Klasse gebündelt sind, sondern dass das Panel einige Funktionen und Daten besitzt, die über seine Componenten aufgerufen bzw. verändert werden können, und das Frame besitzt wieder ein eigenes Paket an Daten und Funktionen.
Wie kriege ich es jetzt hin, dass meine Panel und meine Frame Klasse gescheit miteinander kommunizieren können? Oder geht das auf diesem Wege gar nicht und ich sollte ein Fenster komplett in einer Klasse bündeln und auf die Trennung von Panel-Klasse und Frame-Klasse verzichten?
Irgendwie fehlt mir da so der Einstiegspunkt. Ich habe mir zwar jetzt schon ne Menge Tutorials angelesen, aber bisher auch noch nichts gescheites über solche Mehr-Fenster-Anwendungen gefunden. Hoffe mir kann da jemand nen Rat geben, wie man es am besten macht.
Ein Verweis auf ein gescheites Tutorial wäre natürlich auch super
Und wo ich schon mal dabei bin, hätte ich direkt noch eine Frage:
Ich möchte mein Programm von Anfang an Multilingual schreiben, also mit Unterstützung für verschiedene Sprachen. Dazu wollte ich für jedes Panel ein ListRessourceBundle benutzen, welches die Texte für alle Componenten in der entsprechenden Sprache beinhaltet. Ein TextProvider soll mir dann die Beschriftung für jede Komponente liefern.
Mein Problem ist folgendes: Wenn ich die ListRessourceBundle-Klassen nicht in den Hauptpfad lege sondern in eines der Packages, dann werden sie nicht mehr gefunden und ich bekomme die Fehlermeldung
"Can't find bundle for base name MainMenu, locale de"
z.B. für meine Hauptmenü Klasse. Sobald ich die Datei zurück in den Hauptpfad schiebe, wird sie problemlos gefunden. Den Zugriff auf die Ressourcen mache ich wie folgt:
Code:
ResourceBundle res; //resource bundle for specified base and selected language
try
{
//get the resource bundle
if(strCurrentLanguage == GERMAN)
res = ResourceBundle.getBundle(strBaseName, Locale.GERMAN);
else
res = ResourceBundle.getBundle(strBaseName, Locale.ENGLISH);
//get the string for the specified object
return(res.getString(strObj));
}
catch(java.util.MissingResourceException e)
{
System.out.println(e.getMessage());
return(getDefaultCaption());
}
Ist daran irgendwas falsch oder muss ich sonst irgendwas beachten, wenn ich meine Ressourcen Dateien in ein Package packen möchte?
Danke schon mal im Vorraus.
Gruß
m.a.k.