Java-Quellcode auf mehrere class/java-Files aufsplitten

Hallo mal wieder,

nachdem ich vor ein paar Tagen begonnen habe mich mit Java auseinanderzusetzen, muss ich mich nun an das Board meines Vertrauens wenden. Ich bin eben dabei eine etwas umfangreichere Anwendung mit Hilfe von Swing zu erstellen, allerdings habe ich da noch so manche Probleme mit dem Verständnis von objektorientierter Programmierung.

Mein Programm schaut aktuell mal leicht skizziert in etwa wie folgt aus:

Code:
import xyz.*;

public class indi extends JFrame {
[INDENT]public void test() {
[INDENT]JToolBar tb = new JToolBar();
JButton tb1 = new JButton(new ImageIcon("undo.gif"));
tb.add(tb1);
getContentPane().add(tb,BorderLayout.NORTH);
[/INDENT][/INDENT][INDENT]}

public indi() {
[INDENT]test();

....
....
usw.
....
[/INDENT][/INDENT]....
....
usw.
....

Mein Anliegen ist nun folgendes:
Ich möchte gerne die gesamten von mir erstellten Swing-Komponenten in eine andere public class legen, also in eine andere Datei, da die nun schon ziemlich umfangreich sind und das Scrollen ziemlich mühsam ist.

Dazu meine zwei Fragen:
1) Wie kann ich ein "Projekt" aus zwei *.java-Files erstellen und aus einer Class dann Methoden aus einer anderer Class in einem anderen File aufrufen?
2) Ist das überhaupt die übliche Methode/Vorgangsweise? Ich hab bisher größtenteils nur C gecodet und dort gruppiere ich eben einfach passende Funktionen in unterschiedlichen C-Files und kompiliere die dann einfach gemeinsam.

Hoffe ich konnte das erklären und bin schon mal für jegliche Infos dankbar! :D
 
Ja das ist die übliche vorgehensweise.
Du packst deine Klasse einfach ineine adere Daten.
Importierst diese dann und kannst dann, mittels einer Instanz,
die Funktionalitäten der anderen Klasse benutzen,sofern public.
mfg

sw33t
 
Ich bin mir nicht ganz sicher ob ich Dich richtig verstanden habe - geht es Dir nur darum Komponenten auszulagern um Deine Klasse übersichtlicher zu gestalten? Dafür müsstest Du nicht extra eine zweite datei.java Applikation erstellen, sondern Du könntest z. B. einfach eine zweite Klasse erstellen, die z. B. alle Komponenten für Deine GUI enthält. Diese Klasse könntest Du als innere Klasse anlegen oder als eigenständige Klasse, die von der Ursprungsklasse erbt...
 
Also mir geht's primär darum, dass ich nicht alles in einer Datei habe.

Das funktioniert jetzt prinzipiell auch schon. Der Fehler war, dass ich keine Instanz erstellt hatte. Da hatte das Stichwort schon mal geholfen. Wie dumm von mir, lol :wink:

Allerdings hab ich jetzt noch ein kleines anderes Problem. Wenn ich nun in der neuen Klasse getContentPane() aufrufe, meldet mir javac "cannot find symbol
symbol : method getContentPane()". Das erscheint mir nun auch durchaus logisch. Doch wie kann ich das lösen?
 
Diese Klasse könntest Du als innere Klasse anlegen

Bitte bitte nicht, inner Classes sind sehr hässlicher Programmierstil. Hattest du zum Glück eh nicht vor.

Wenn ich nun in der neuen Klasse getContentPane() aufrufe, meldet mir javac "cannot find symbol
symbol : method getContentPane()". Das erscheint mir nun auch durchaus logisch. Doch wie kann ich das lösen?

Ähm du kannst getContentPane() nur Aufrufen wenn deine Klasse in irgendeinerweise von JFrame abgeleitet ist oder du machst ne Methode in einer Klasse die von JFrame abgeleitet wird die die Klasse von getContentPane zurückgibt. Ist jetzt etwas schwierig zu erklären, da auch deine Infos etwas rar sind.

Wie entwickelst du eigentlich? Du benutzt doch hoffentlich eine anständige IDE. Klingt irgendwie so nach Kommandozeilenaufruf.
 
Du kannst den Quellcode einer Java-Klasse nicht in mehrere Dateien auslagern, wie das bei C++ üblich ist.
Wenn du trotzdem Code aus deiner Klasse auslagern willst (ich vermute mal, es geht um die ganzen GUI-Komponenten), dann kannst du entweder eine Hilfs-Klasse erstellen, die du dann instanziierst und damit die Methoden ausrufst (siehe: Strategie-Entwurfsmuster) oder du machst du auszulagernden Methoden statisch und packst sie in eine Hilfsklasse (dann musst du ggf. eine Instanz deiner GUI-Klasse mit übergeben).
Du solltest aber bedenken, dass du von außerhalb nicht auf private Methoden und Attribute deiner Fensterklasse zugreifen kanst.
Wenn du Methoden der Fensterklasse brauchst (z.B. getContentPane()), musst du bei den ausgelagerten Methoden immer die aktuelle Instanz der Fensterklasse zugreifen können (indem du "this" mit als Parameter übergibst).

Was sich bei Swing-Programmiereung grundsätzlich aber immer lohnt, ist das Zusammenfügen von mehreren Komponenten zu einer neuen "Superkomponente". Wenn du z.B. in deinem Fenster irgendwo einen Label, eine Textbox und einen Button hast, die zusammen gehören und die mehr oder weniger unabhängig von anderen Komponenten sind, kannst du z.B. eine neue Komponentenklasse von Panel ableiten, die diese Elemente verwaltet. Dann musst du in der Hauptklasse nur noch die Superkomponenten einfügen und miteinander vernetzen (z.B. über Event-Handler).

mfg, metax.
 
Ok, also danke erst mal für die zahlreichen Hilfestellungen. Ich hatte mir das heute früh nochmal angesehen mit den Klassen ableiten. So hat's dann auch funktioniert. Das Problem war einfach, dass ich eine Instanz von der falschen Klasse bilden wollte. Deswegen hatte ich auch diese Fehlermeldung.

Wie entwickelst du eigentlich? Du benutzt doch hoffentlich eine anständige IDE. Klingt irgendwie so nach Kommandozeilenaufruf.
lol, ja. Da hast du recht. Allerdings hab ich mir mittlerweile NetBeans installiert und versuche mich daran umzugewöhnen. Ich bin im Umgang mit IDEs irgendwie nicht sehr geübt. Hätte ich von Anfang an eine IDE verwendet, wäre ich wohl auch nicht so schnell auf die Idee gekommen Klassen auszulagern. :wink:

Was sich bei Swing-Programmierung grundsätzlich aber immer lohnt, ist das Zusammenfügen von mehreren Komponenten zu einer neuen "Superkomponente".
Also so eine ähnliche Idee hatte ich auch. Aktuell liegen zusammengehörende Komponenten bei mir aber in verschiedenen Methoden. Mal sehen ob das irgendwann einen Sinn macht. *gg* :rolleyes:

Wie gesagt, danke nochmals. Irgendwie hatte ich das alles wohl unterschätzt mit Java.
 
Indi:
Allerdings hab ich mir mittlerweile NetBeans installiert und versuche mich daran umzugewöhnen.
NetBeans habe ich noch nie benutzt, aber ich kann Dir Eclipse wärmstens empfehlen. Eclipse bietet eine sehr komfortable Entwicklungsumgebung & unterstützt mittels Plugins auch andere Sprachen wie z. B. C, C++ und PHP... Wenn Du Dich also an eine IDE "gewöhnen" willst, dann doch besser an eine die vielseitig ist...

Und hier noch ein Link zur Bibel der Java-Coder:
http://openbook.galileocomputing.de/javainsel8/
 
Zurück
Oben