Klassen Generell: Zugriff auf GUI-Klassen & -Elemente aus anderen Klassen

baphomet13

Mitglied
Liebe Alle,

Bin JAVA-Einsteiger und habe mehrere Projekte vor. Viele davon benötigen eine Datenbank-Verbindung und ein GUI. Der Übersichtlichkeit halber habe ich vor, generell mehrere Klassen zu entwickeln, in denen ich jeweils von einander "getrennte" Operationen lagere, also (z.B.) eine Klasse für die Datenbank-Operationen, eine für's GUI, eine mit der main, etc.

Bei meinen ersten Versuchen habe ich mich ziemlich schwer damit getan, den Zugriff auf bspw. ein JTextField in der GUI-Klasse von anderen Klassen aus zuzugreifen. Ich denke, dass mir hier eine grundlegende Idee entgangen ist.

Nach Google-Recherche stellte sich die Lage wie folgt dar.
Die meisten Nachfragen in Foren, etc. zu diesem Thema werden beantwortet mit "Zugriff auf GUI-Elemente aus anderen Klassen geht nicht." Ein paar jedoch nennen das "Observer Design-Pattern" als Möglichkeit.

Meine (generelle) Frage also: Wie läßt sich ein Zugriff auf GUI-Elemente aus anderen Klassen gestalten?

Als Beispiel: Ein mit Text vorbelegtes JTextField soll append()et werden um einen String, der in einer andere als der GUI-Klasse generiert wird.

Danke für Eure Hilfe & bitte sagt Bescheid, wenn Ihr mehr Info braucht.

Grüße,
b13

p.s.: Wären nicht getter/setter eine Möglichkeit?
 
natürlich sind getter und setter eine Möglichkeit. Das wasdu machen musst, ist einfach Object Orientiert Programmieren.

Wenn du eine Klasse GUI hast kann diese Klasse eine Methode append(String anbieten), diese Klasse verwaltet dann intern wie das ganze dann dargestellt wird.

Weiters hilfreich ist hier das MVC Prinzip
 
Wenn du eine Klasse GUI hast kann diese Klasse eine Methode append(String anbieten), diese Klasse verwaltet dann intern wie das ganze dann dargestellt wird.

Danke erstmal! Ich fürchte, ich bin durch OOP noch nicht ganz durchgestiegen.

Wäre es möglich, ein Minimalbeispiel zu geben? Ich weiß, dass das nicht gerade die feine englische Art ist, danach zu fragen, aber ich komme hier einfach nicht weiter. Denke, es würde mir einen Durchbruch verschaffen, das einmal in einem funktionierenden Beispiel zu sehen.

Besten Dank im Voraus!
 
Hm, so richtig vorwärts gekommen bin ich noch nicht (auch nicht nach Durchsicht des anderen Threads). Zur Präzisierung, ich möchte eine JTextArea append()en, nicht ein JTextField...

Ich habe jetzt folgendes:
Simple.java
Java:
public class Simple {

	public static void main(String[] args) {
		Guy gui = new Guy(null);
		gui.setText("100");
		System.out.println(gui.getText());
	}
}

Guy.java (Habe bereits eine andere Klasse "Gui" im Projekt, daher die etwas merkwürdige Benennung).
Java:
import javax.swing.*;
import java.awt.*;

public class Guy extends JFrame {
	
    private String text = "1";    //Holds the data for text
	
    public Guy (String textVal)
    {
    	/** Anfang Paste */
    	super("Fenster Titel");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        getContentPane().setLayout(new FlowLayout());

        JTextArea area = new JTextArea();
        area.setEditable(false);
        area.append(getText());
        getContentPane().add(area);

        setLocation(250, 190);
        setSize(300, 90);
        setVisible(true);
    	/** Ende Paste */
    	
    }//end constructor Guy
	
	public String getText ( )
       {
           return text;
       }//end method getText

       public void setText (String textVal)
       {
           text = textVal;           
       }//end method setText
       
}

*Natürlich* funktioniert das noch nicht. Zeile 17 in Guy.java hängt natürlich "1" und nicht "100" an (weil der setText-Aufruf in der main ja nach Instanziierung von Guy geschieht).

Jetzt weiß ich trotzdem nicht genau, wo ich hier weiterkomme. Hatte daran gedacht, das GUI wie im Oracle-Tutorial per invokeLater aufzurufen, aber das funktioniert auch nicht...

Für weitere Tips & Code-Fixes wäre ich sehr dankbar.

Tut mir leid, Ihr habt sicherlich Besseres zu tun als 100x durchgekauten Code zu verbessern, aber ich habe ein Brett vor'm Kopf.

Danke!
 
//Holds the data for text
nein da hast du dir mvc nicht genau angesehen...

aber wurscht...

nur weil du den text änderst, ändert sich natürlich nciht der inhalt der area


Java:
import javax.swing.*;
import java.awt.*;

public class Guy extends JFrame {

   private JTextArea area;

   public Guy(String textVal) {
      /** Anfang Paste */
      super("Fenster Titel");
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      getContentPane().setLayout(new FlowLayout());

      area = new JTextArea();
      area.setEditable(false);
      area.append(getText());
      getContentPane().add(area);

      setLocation(250, 190);
      setSize(300, 90);
      setVisible(true);
      /** Ende Paste */

   }// end constructor Guy

   public String getText() {
      return area.getText();
   }// end method getText

   public void setText(String textVal) {
      area.append(textVal);
   }// end method setText

}

Guy.java (Habe bereits eine andere Klasse "Gui" im Projekt, daher die etwas merkwürdige Benennung).
nicht dein ernst oder?
 

Zurück
Oben