ich habe c, c++ programiert und arbeite mich gerade in Java ein, mit Netbeans habe ich eine GUI erstellt.
Dort habe ich auf einen Button eine Action gelegt. Außerdem habe ich mir eine Testklasse erstellt.
Wie kann ich inerhalb der
Globale Variablen gibt es in Java nicht. Java ist streng Objektorientiert!
Du musst also ein Objekt der Klasse instanzieren, welches die gewünschte Methode enthält und dann kannst du es aufrufen
Code:
//Achtung -->> pseudocode
ClassA{
public ClassA(){
}
public void felderfuellen(){
// tu dies, tu das
}
}
ClassB{
...
...
ClassA aaa = new ClassA();
...
...
private void newbtActionPerformed(java.awt.event.ActionEvent evt) {
aaa.felderfuellen();
}
...
...
Wenn er UNBEDINGT so etwas haben will, bitte. Die Möglichkeit gibt es nunmal, und wenn ich sie ihm nicht sage, dann bekommt er sie irgendwo anders her. Für Anfänger ist es vorallem zu Beginn nicht einfach OO zu denken und einzusetzen. Und bevor er die Lust am Programmieren verliert, weil er es momentan noch nicht anderst umsetzen kann (Gedankengänge z. B.), dann soll er es lieber so machen, und sich dann in ein paar Monaten denken (wenn er dann seinen Code nochmal anschaut) "Was hab ich denn da für scheiße programmiert?". War bei mir nicht anders .
Dass soetwas gegen jeden OO-Grundgedanken verstößt brauch ich wohl nicht weiter erwähnen.
@leute:
ihr denkt da irgendwie in falsche richtung... dem OP gings primär nicht um globale variablen, sondern darum, wie er aus dieser methode irgendein sonstwo instanziiertes objekt anspricht.
@opino: mir ist leider nicht so wirklich klar geworden, was du mit
meinst... kommt ja drauf an wo das objekt ist und wo du diese methode definiert hast... Wenn das objekt selbst den Listener implementiert, und diese methode beinhaltet, dann kannst du darauf einfach direkt zugreifen. Aber diesem Code-Ausschnitt kann man nicht entnehmen wo was ist...
@leute:
ihr denkt da irgendwie in falsche richtung... dem OP gings primär nicht um globale variablen, sondern darum, wie er aus dieser methode irgendein sonstwo instanziiertes objekt anspricht.
Das war ja keine Empfehlung, sondern nur das Aufzeigen einer Möglichkeit. Aber was spricht prinzipiell gegen Singleton? Ich denke schon, daß dieses Entwurfsmuster in manchen Anwendungsfällen durchaus seine Berechtigung hat!
okay... singletons sind unter umständen keine singletons mehr wenn es mehrere classloader gibt. super. zur kenntnis genommen. :toll: Glaube aber kaum das opino damit bei seiner gui-frage viel weitergekommen ist
wenn du hier eine methode eines fremden objektes aufrufen willst, so wär es sinnvoll, wenn dein objekt eine refernz auf das fremde objekte hat.
zb du hast eine gui und willst jetzt in der gui eine methode des controller aufrufen.
entweder instanziert dein controller die gui und gibt sich selber mit oder eine andere klasse instanziert controller und gui und setzt den controller in die gui.
Vielen dank für die vielen Beiträge.
Ich habe mir gestern noch ein Tachenrechnerbeispiel aus dem Forum gezogen und das durchgeschaut.
Mein Fehler war das ich die Objekte in Klassenmethoden definiert habe und ich sie somit ich in anderen Methoden
ansprechen konnte.
Ich definiere meine Objekte nun gleich zu begin der Klasse und kann diese nun auch von überall ansprechen.
So kann man das nicht sagen. Klar macht es Sinn, statische Werte auf diese Weise fest zu definieren.
Beispiel:
Code:
JLabel la = new JLabel("blabla", JLabel.NORTH_EAST);
JPanel panel = new JPanel(new BorderLayout());
panel.add(new JButton(), BorderLayount.NORTH);
etc.
etc.
etc.
Genauso kann man sich eigene Sachen die so "superglobal" und statisch sind definieren.
Beispielsweise habe ich eine Klasse, dass wenn ich der ein JLabel mit einem Wert übergebe, das Aussehen verändern
Die "Variablen", von denen du jetzt redest sind eigentlich eher Konstanten :wink: Natürlich sind public static final Objekte für viele Dinge OK. Aber wenn man das "final" wegläßt, hat man IMHO irgendwas falsch gemacht.
Ich kenne "globale" variablen eigentlich nur als Konstanten, daher meine Annahme, das er dies meinte. An den anderen Fall ohne final habe ich in diesem Moment nicht gedacht. Dann will ich mich mal entschuldigen das ich zu schnell geschossen habe
ich empfehle eher, die "richtige" klasse als listener zu registrieren. wenn die das event empfangende klasse nicht die entsprechenden methoden anbietet, die gerufen werden sollen, dann ist sie wahrscheinlich der falsche listener.
ansonsten ist es aber richtig, dass eine klasse eine referenz auf ein anderes objekt benötigt, wenn sie an diesem methoden aufrufen will. wenn man nicht das gesamte interface zur verfügung stellen möchte, arbeitet man in java üblicherweise mit callbacks.