Info zwischen verschiedene Klassen austauschen

freundchen

Neues Mitglied
Ein nettes Hallo allerseits,

ich habe bis dahin nur in C programmiert und bin in Sachen OOP ein Neuling und habe eine Frage:
Wie kann ich eine Zeichenkette (String) aus einem Textfeld einer anderen Klasse in Java bekommen?

Bspw. habe ich eine Benutzeroberfläche, wo ich Textfelder habe und ich will den Inhalt dieser Textfelder von einer anderen Klasse "lesen".

Sinn und Zweck ist die Erstellung einer doppelverkettete Liste: der Benutzer gibt Namen in einem Textfeld und durch einen Button werden die Namen im gleichen Visualisierungsfenster ausgegeben. Mit Felder habe ich das schon gelöst, würde das ganze aber durch Listen lösen wollen.

Die Struktur der Klassen würde so aussehen: Doppenliste (erzeugt neues Element) --> Element (erzeugt neues Inhalt) --> Inhalt

Bin für jede Hilfestellung sehr dankbar. Auf meiner Suche im Netz finde ich keinen Beispiel für Listen, die in einer Benutzeroberfläche realisiert wurden, sondern nur Ein-/Auslesen aus der Kosole....
Falls jemand einen ähnlichen Beispiel kennt, bitte ich um einen Link u.ö.

Vielen Dank nochmal.
 
Hm also das ist schon etwas komplexer zu erklären.

1.) Datenzugriff immer über Getter Setter. Siehe dazu Datenkapselung
2.) Daten synchronisieren über Binding Lib oder MVC
3.) Sehr guter Einstieg in OOP mittels Java: Java von Kopf bis Fuß (50€) <-- Eins der besten Einsteigerbücher die ich kenne!

Entschuldige für die nicht so konkrete Antwort aber dein Vorschlag klingt konzeptionell etwas daneben. Doppelt verkettete Listen kommen imho nur intern in Implementierungen von Collections vor. So LowLevel musst du imho nicht programmieren.
 
Zuletzt bearbeitet von einem Moderator:
dein Vorschlag klingt konzeptionell etwas daneben. Doppelt verkettete Listen kommen imho nur intern in Implementierungen von Collections vor. So LowLevel musst du imho nicht programmieren.

Das ist mir eben schon in einem anderen Thread aufgestossen...
Wo siehst du ein Problem wenn jemand eine grundlegende Datenstrunktur implementieren will?
Wie hast du denn Programmieren gelernt, oder hast du selbst etwa noch nie simple Datenstrukturen oder Algorithmen ausprogrammiert?

Bezüglich der Frage: die Frage verstehe ich nicht. Zum einen gibt es im Prinzip keinen Unterschied ob die Oberfläche nun per Konsole oder per GUI realisiert ist. Wenn doch, dann fehlen irgendwo Grundlagen. So "komplex" ist das übrigens auch nicht. Informationen werden zwischen Objekte per Methodenaufrufen ausgetauscht - fertig.
 
erstmal vielen Dank für alle Antworten,

@ Final Striker: einen guten Ansatz für mich konnte ich durch deinen Link finden. Ich habe es auch so übernommen, bekomme auch keine Fehlermeldung, nur scheinbar Probleme, dass die Informationen an einer Stelle fehlen "Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException"

Zum Verständnis: ich will eine Gui erstellen (siehe Anhang), wo Namen in Textfeldern eingetragen werden können und im selben Gui als Labels ausgegeben werden. Dazu erzeuge ich eine doppelt verkettete Liste.

Der Code ist lang. Wichtig sind nur die fettmarkierten Stellen
Klasse 1 (Gui):

Java:
public class Gui extends Fenster_1
{
    protected JFrame fenster_1;
    protected Container c; 
    protected JButton button_1;
    protected JButton button_2;
    protected JLabel label_1 = new JLabel();
    protected JLabel label_2 = new JLabel();
    protected JLabel label_leer = new JLabel();
    Label[] kinder = new Label[11];
    public Label reim = new Label();
    [B]protected JTextField tf_1;[/B]    protected JTextField tf_2;
    private String name;



    private int x,y = 0;
    int i =0;   // Anzahl der Kinder (original)
    Font f1 = new Font("Serif",Font.BOLD,20);
    Font f4 = new Font("Serif",Font.BOLD,25);
    Color f2 = new Color(255,0,0);
    Color f3 = new Color(20,20,20);
    Color f5 = new Color(150,255,150);

    
    private static Element kopf;
    private static Element ende;
    private static Element aktuell;
   
    /**
     * Konstruktor für Gui
     */
    public void Gui() 
    
    {
        Initdliste();
              // Erzeuge ein Fenster-Objekt
        fenster_1 = new JFrame();
        fensterErzeugen("Kinderabzählreim ",fenster_1);
        //Bestimme die referenz auf den eigenen Container
        c = fenster_1.getContentPane();
        // Setze das Layout       
        c.setLayout(new FlowLayout(FlowLayout.LEFT));
        c.setBackground(f5);
        
        
        // Namen eintragen:
        label_1 = new JLabel("Dein Name: ");
        tf_1 = new JTextField(10);
        tf_1.setFont(f1);
        tf_1.setOpaque(true);
        label_1.setFont(f1);
        c.add(label_1);
        c.add(tf_1);  


        // Button für Hinzufügen eines Namens
        button_1 = new JButton("hinzufügen");
        button_1.setFont(f1);
        //button_1.setBounds(100, 400, 40, 20); wenn setLayout(null); ist
        c.add(button_1);
        // actionlistener reagiert auf eine aktion des nutzers
        ActionListener ac_lis = new MyListener();
        // zuweisen von ac_lis zu button 1
        button_1.addActionListener(ac_lis);
        
        // Abzählreim eintragen:

        label_2 = new JLabel("Abzählreim eingeben: ");
        tf_2 = new JTextField(40);
        tf_2.setFont(f1);
        tf_2.setOpaque(true);
        label_2.setFont(f1);
        c.add(label_2);
        c.add(tf_2);        
        
        // Button für die Animation vom eingegebenen Abzählreim
        button_2 = new JButton("Start");
        button_2.setFont(f1);
        c.add(button_2);
        label_leer = new JLabel("                                                                                                                                                                                               ");
        c.add(label_leer);
        ActionListener ac_lis2 = new MyListener2();
        button_2.addActionListener(ac_lis2);
        
        
        // Fenster sichtbar machen
       fenster_1.setLocation(200,100);
       fenster_1.setVisible(true);  
    }
    
    /**
     * Initialisieren der Liste // diese methode kann von außen nicht aufgerufen werden, da private
     */
    private void Initdliste()
    {
        kopf = null;
        ende = null;
        aktuell = null;
        i=0;
    }
    
       
     private void zeichneLabel()    // private: damit zugriff nur über der methode anzeige erfolgen wird
     {
      fenster_1.setLocation(200,100);
      fenster_1.setVisible(true);   

    }
    
   [B] // Methode, die den Text im Textfeld ausliest:
    // deshalb public, damit die klasse inhalt darauf zugreifen kann
    public String getTf1(){ 
        return tf_1.getText();        
    }[/B]    
// Methode zum "Reagieren" auf Klick auf Button Hinzufügen!
     
     
public class MyListener implements ActionListener   // Beim Betättigen von button_1 (hinzufügen von kinder) wird diese Methode ausgeführt
 {
     

  public void actionPerformed (ActionEvent e)
  {
      // die folgenden zeilen sind von der methode "fuegeEinNach" geholt worden.      
      Element akt;
// Kind erzeugen 
        akt = new Element();         // akt ist das neue element, das hinzugefügt wird
        
// Sonderfall erstes Element (Liste ist leer)        
        if (kopf == null)
        {
            kopf = akt;
            ende = akt;
            aktuell = akt;  // aktuell ist der zeiger, worauf es gerade gezeigt wird
        }
        else
 // allgmeiner Fall
         {
             akt.next = aktuell.next;   // vertauschen der nachfolger
             aktuell.next = akt;
 
 // Rueckwaetsverkettung
             akt.prev = aktuell;
             aktuell.next.prev = akt;
             
             aktuell = akt;
         }
// aktuelles Element ist letztes Element
        if (aktuell.next == null)
            ende = aktuell;
        
  }
  
 }

 public class MyListener2 implements ActionListener   // Beim Betättigen von button_2 (start der animation) wird diese Methode ausgeführt
 {
  public void actionPerformed (ActionEvent e)
  {
        if (aktuell != null)  
          aktuell.container.ausgabe();
  }
 }
  
}


Klasse 2:

Java:
public class Element
{
    protected Element next;
    protected Element prev;
    protected Inhalt container;
    
    /**
     * Konstruktor
     * 
     */
    public Element()
    {
        container = new Inhalt();
        next = null;
        prev = null;
    }

}

Klasse 3:

Java:
public class Inhalt

{
    [B]protected String nameKind;  // wird aus tf_1 von Klasse Gui geholt[/B]
    protected String reim;  // wird aus tf_2 geholt
    private Gui hilf;    // Hilfsvariable, um Namen zu merken
    
    /**
     * Konstruktor
     * 
     */
    public Inhalt()
    {
        [B]nameKind = new Gui().getTf1();  [/B]
    }

public void ausgabe()
    {
        System.out.println("\n"+"Elementname    : "+ nameKind);   // Testen: Ausgabe Konsole
    }



Ich bin mir sicher, dass meine Vorgehensweise schon ungeschickt ist. Der OOP-Ansatz ist schon ein ganz anderer. Hoffe, dass irgendwann einen Klick bei mir macht.

Bedanke mich im Vorraus für jede Antwort.

PS: ich stelle gerade fest, dass die Fettmarkierung im Java-Code nicht wirkt, da ist nur zu sehen.
 

Anhänge

  • gui.jpg
    gui.jpg
    30,3 KB · Aufrufe: 46
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben