PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : java -> swing -> klassenzugriff


Zielscheibe
2003-06-10, 00:11:12
folgendes problem mit einer graf. oberfläche

habe ein klasse fenster die eine oberfläche aufbaut (was auch einwandfrei funktioniert)

public Fenster()
{
...
setJMenuBar(new FileViewerMenu());
Container cp = getContentPane();
cp.setLayout(new BorderLayout(hgap, vgap));
TextArea grossesTextFeld = new TextArea();
cp.add("Center", grossesTextFeld);
TextFeld eingabeFeld = new TextFeld();
cp.add("North", eingabeFeld);

.....
desweiteren erzeuge ich noch eine klasse "loader" die zum lesen aus einer datei da ist (was auch fkt)
}



ich will jetzt in der klasse "eingabeFeld" das eingebene an
"loader" übergeben
(man gibt also im "textFeld" einen dateinamen ein und der wird an "loader" übergeben, da ich noch anderen dinge tun muss, muss ich den loader mit fenster erzeugen!)
das problem ist, dass zwar fenster die klasse "loader" kennt - aber "eingabeFeld" nicht!
wenn ich also in loader eingabeFeld.machIrgendwas() aufrufe, kann das net gehen.
was kann ich tun???

Abe Ghiran
2003-06-10, 12:43:07
Moin, moin...

Erst mal zum posten von Quellcode: das Forum kennt dafür ein 'code' tag (http://www.forum-3dcenter.org/vbulletin/misc.php?s=&action=bbcode#code), das den text besser formatiert (siehe unten).

Zum einen: was ist denn TextFeld für eine Klasse, hast du die selbst geschrieben? Falls ja, was spricht dagegen einfach JTextField zu benutzen?

Zu deinem Problem: Die erste Möglichkeit wäre, das du dem TextFeld auch deinen Loader bekannt machst, was ich aber als nicht so schön ansehe da es dem textfeld ja eigentlich egal sein soll, was mit dem eingegebenen Text passiert.

Ich würde stattdessen den Code in deiner Klasse Fenster unterbringen, denn Fenster kennt ja praktischeweise schon beide: deinen Loader und das Eingabefeld.
Also in etwa so (irgendwo in Fenster):

private void handleInput(){
String filename = eingabeFeld.getText();
loader.load(filename);
....
}

Jetzt müsstest du nur noch dafür sorgen, das diese Methode aufgerufen wird wenn der User mit seiner Eingabe fertig ist. Also praktischerweise über einen Eventlistener, entweder auf einem extra button oder direkt auf dem EingabeFeld (z.b. wenn return gedrückt wird).

Falls es noch irgendwelche Fragen gibt, immer her damit ;).

Grüße, Jan

Zielscheibe
2003-06-12, 18:32:23
Original geschrieben von Abe Ghiran
Moin, moin...

Erst mal zum posten von Quellcode: das Forum kennt dafür ein 'code' tag (http://www.forum-3dcenter.org/vbulletin/misc.php?s=&action=bbcode#code), das den text besser formatiert (siehe unten).

alles klar
danke für die info :)



Zum einen: was ist denn TextFeld für eine Klasse, hast du die selbst geschrieben? Falls ja, was spricht dagegen einfach JTextField zu benutzen?

TextFeld war von JTextField geerbt
aber ich mußte noch dinge hinzugefügen/ändern




Zu deinem Problem: Die erste Möglichkeit wäre, das du dem TextFeld auch deinen Loader bekannt machst, was ich aber als nicht so schön ansehe da es dem textfeld ja eigentlich egal sein soll, was mit dem eingegebenen Text passiert.

Ich würde stattdessen den Code in deiner Klasse Fenster unterbringen, denn Fenster kennt ja praktischeweise schon beide: deinen Loader und das Eingabefeld.
Also in etwa so (irgendwo in Fenster):

private void handleInput(){
String filename = eingabeFeld.getText();
loader.load(filename);
....
}



hab das problem gelöst in dem ich in der "hauptklasse" fenster die von fenster erzeugten objeke an die anderen klassen übergeben habe
dort hab ich die klassen mit der this variable "übenommen" und so kann ich sie ansprechen
wäre vielleicht auch mit einer getMethode in fester gegangangen die das objekt zurück gegeben hätte aber das ich es ja so oder so brauch kann ich auch gleich mit geben




Jetzt ... Also praktischerweise über einen Eventlistener, ....


das war soweit schon klar
hab ich gemacht


Falls es noch irgendwelche Fragen gibt, immer her damit ;).

Grüße, Jan

wenn du pech hast komme ich darauf zurück ;)