globale variablen

Status
Nicht offen für weitere Antworten.

opino

Mitglied
hallo forum,

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

Code:
 private void newbtActionPerformed(java.awt.event.ActionEvent evt) {
felderfuellen();   
}

der Methode mein objekt ansprechen. Gibt es diese Möglichkeit überhaupt?

für eine Antwort wäre ich sehr dankbar.
 
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();   
  }

  ...
  ...
 
Oder eine öffentliche, statische Variable in einer Klasse. Das sollte noch am ehesten der Vorstellung einer globalen Variable entsprechen.
 
Hobbit_Im_Blutrausch hat gesagt.:
Oder eine XXXXXX :autsch: XXXXXXXXX. Das sollte noch am ehesten der Vorstellung einer globalen Variable entsprechen.
Eigentlich hätte ich von dir nicht solche Empfehlungen erwartet :noe:
 
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.
 
dann gibt's da ja noch die Möglichkeit globale Variablen über das Singleton-Muster zu realisieren (ist ja nicht wirklich was anderes).
 
@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
mein objekt ansprechen
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...
 
trazzag hat gesagt.:
dann gibt's da ja noch die Möglichkeit globale Variablen über das Singleton-Muster zu realisieren (ist ja nicht wirklich was anderes).
arrrrhhhhhhg ... ich glaub bei der nächsten Singleton-Empfehlung vergesse ich mich.

ms
 
Andrey hat gesagt.:
@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.

Der Titel ist aber so verleitend. Ich neige dann immer dazu mir den Text nicht durchzulesen oder nur zu überfliegen 😉 .
 
ms hat gesagt.:
trazzag hat gesagt.:
dann gibt's da ja noch die Möglichkeit globale Variablen über das Singleton-Muster zu realisieren (ist ja nicht wirklich was anderes).
arrrrhhhhhhg ... ich glaub bei der nächsten Singleton-Empfehlung vergesse ich mich.

ms

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!
 
ja, aber ein singleton, um die referenz von irgendeinem objekt an einen action listener zu übergeben? :autsch: hallo? :bae:
 
das singleton hier eher nicht eingesetzt werde sollte, ist ja unstrittig - gib mir doch nur um die vollständigkeit der Möglichkeiten ;-)
 
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 😀
 
aus dieser methode irgendein sonstwo instanziiertes objekt anspricht.
is das nicht, etwas was man auf keinen fall machen soll.
da kann ich ja gleich schon alles public static machen und in eine klasse werfen.

also konkret zum problem zurück:
Code:
private void newbtActionPerformed(java.awt.event.ActionEvent evt) { 
felderfuellen();    
}
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.

Noch einmal vielen dank für die vielen Antworten.
 
Marco13 hat gesagt.:
Hobbit_Im_Blutrausch hat gesagt.:
Oder eine XXXXXX :autsch: XXXXXXXXX. Das sollte noch am ehesten der Vorstellung einer globalen Variable entsprechen.
Eigentlich hätte ich von dir nicht solche Empfehlungen erwartet :noe:

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


mySetComponent(JLabel, MyDesign.STYLE_TITLE);

etc.
 
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.
 
Janus hat gesagt.:
wenn man nicht das gesamte interface zur verfügung stellen möchte, arbeitet man in java üblicherweise mit callbacks.
???:L
Vielleicht meinst du ja das Richtige - nur klingt es nicht verständlich.

ms
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben