ActionListener und Werteübergabe an andere Klasse

  • Themenstarter Themenstarter Flokk
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
F

Flokk

Gast
Ich habe eine Klasse mit der ich einen String von der Klasse CGui übernehmen will, wie in diesen Bsp. zu sehen ist. So weit so gut:
Code:
public class CTestklasse {
    
   public static void main(String args[]) {
    CGui of = new CGui();
    String wert = of.getTextFromTextBox();
    System.out.println(wert);
    }
    
}

In der Klasse CGui habe ich ein JButton und eine JTextField. Nun will ich in das Textfeld einen Text eingeben und dann will ich den Button drücken, sodass der Text dann, und nur dann, in den zu übergebenden String gespeichert wird.

Jetzt habe ich nur folgendes Problem:
Code:
jButton.addActionListener(new ActionListener() 
        { 
                public void actionPerformed(ActionEvent e) 
                { 
                return jTextfeld.getText();
                } 
        });
--> so gehts, da das return ein public String … verlangt

Code:
 jButton.addActionListener(new ActionListener() 
        { 
                public string actionPerformed(ActionEvent e) 
                { 
                return jTextfeld.getText();
                } 
        });
--> so gehts auch nicht, da der Action Listener ja ein public void …haben will.

Was tun???

PS: Am liebsten wäre mir das der String direkt in die obere Klasse(CTestklsse) geschrieben wird!

Danke im Voraus für jede Hilfe

Flokk
 
du musst dir eine andere Denkweise für Java-Programme aneignen,
durch das Drücken eines Buttons kann nicht eine Variable in der main-Operation befüllt werden,

schon gar nicht hat das mit dem Rückgabetyp der actionPerformed() zu tun, wie kommst du darauf,
alles was dort zurückgegeben würde landet höchstens in irgendeinen System-Thread der das MouseEvent bearbeitet,

die Signatur von der actionPerformed() ist fest vorgegeben und kann nicht verändert werden,
die main-Operation läuft nach der Erzeugung der GUI weiter und drüfte normalerweise innerhalb von Millisekunden beendet sein, lange bevor du auf den Button drückst,

das Programm steht zu diesem Zeitpunkt still, allein durch das Button-Drücken wird ein Event erzeugt
und die Kontrolle an dier actionPerformed()-Operation übergeben,
was auch immer du tun willst: es muss in dieser Operation geschehen, natürlich sind auch Aufrufe an externe Objeke, das Starten von Threads und alles andere möglich,
nur mit der main-Operation hat das nix mehr zu tun, das ist praktisch eine neue main 😉

darin kannst du gerne den String von der TextBox auslesen (falls eine Referenz auf die TextBox oder auf die GUI bekannt ist)
und an die Konsole ausgeben,
um es in die CTestKlasse zu schreiben müsste dort eine statische Operation vorhanden sein, die aufgerufen werden kann
CTestKlasse.setString(st);

dies hätte allerdings auch nix mit der main-Operation zu tun, diese ist da schon vorbei oder wenn nicht kann sie unmöglich angesprochen werden
 
Ja entschuldige das was ich geschrieben haben, vielleicht nicht alles richtig war, aber von daher ist es ja das Anfängerforum.

Das Auslesen des Textfeldes bekomme ich ja hin, damit is mir aber irgendwie noch nicht geholfen! Ich will das(aus dem Textfeld) ja aufrufen wenn ich die andere Klasse(Testklasse) starte.
Danke

FLOKK
 
SlaterB hat gesagt.:
um es in die CTestKlasse zu schreiben müsste dort eine statische Operation vorhanden sein, die aufgerufen werden kann
CTestKlasse.setString(st);
Ein statischer Kontext ist nicht nötig und außerdem auch böse. :wink: In ganz seltenen Fällen nur wird von static Gebrauch gemacht. Objekte kommunizieren in Java durch versenden von Nachrichten. Sie rufen also gegenseitig ihre Methoden auf. Hier eine Variante, wie das zu lösen wäre.

Die Testklasse:
Code:
public class TestClass {
   private Gui of;
   
   public TestClass() {
      of = new Gui(this, "Text eingeben");
   }
   
   public void notifyAboutAction() {
      System.out.println(of.getTextFromTextBox());
   }
   
   public static void main(String[] args) {
      new TestClass();
   }
}

Eine GUI mit Textfeld und Button:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Gui extends JFrame {
   private JTextField txtField;
   private JButton button;
   private JPanel panel;
   private TestClass owner;

   public Gui(TestClass owner, String title) {
      super(title);
      this.owner = owner;
      setSize(400, 150);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      
      txtField = new JTextField();
      txtField.setPreferredSize(new Dimension(200, 24));
      
      button = new JButton("OK");
      button.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            Gui.this.owner.notifyAboutAction();
         }
      });
      
      panel = new JPanel();
      
      panel.add(txtField);
      panel.add(button);
      
      getContentPane().add(panel);

      setVisible(true);
   }
   
   public String getTextFromTextBox() {
      return txtField.getText();
   }
}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben