GUI- und Anwendungscode trennen

Status
Nicht offen für weitere Antworten.
M

muffi

Gast
hallo,

angenommen ich habe zwei klassen, eine Gui.java und eine Logic.java. die beiden klassen sind für ein gui fenster und dessen aktionen verantwortlich.

Gui.java offnet ein fenster mit textfeldern und buttons. die buttons haben addActionListener()-Methoden.

Logic.java implements ActionListener. die actionPerformed()-Methode ist

Code:
public void actionPerformed(ActionEvent event) {
	 String command = event.getActionCommand();
	  if (command.equals("Save")) {
	 // hier möchte ich inhalte der textfelder aus Gui.java speichern
}

meine frage nun: wie kann ich z.b. nach drücken des save-buttons auf die textfelder der klasse Gui.java zugreifen, um sie z.b. in ne datenbank zu speichern? geht das überhaupt aus der klasse logic.java?
durch getSource() bekommt man ja nur den ereignisauslöser, aber nicht das gui-objekt. ????
wenn ich gui+logic in einer klasse habe, kann ich ja einfach die felder als instanzvariablen definieren und dann z.b. durch this.textField.getText() o.ä. darauf zugreifen. aber wie macht man das bei der trennung?


hinweis1: ich möchte aber bei der trennung auf zwei klassen (gui + logic) bleiben und keine weitere kapselung durch z.b. ne dritte klasse vornehmen.

hinweis2: meine main-methode sieht so aus:
Code:
Logic n = new Logic();
Gui x = new Gui(n);
x.setVisible(true);

vielen dank für hilfreiche antworten.
 
B

Beni

Gast
Da muss Logic die Instanz von Gui haben, sonst läuft nicht viel. Das kannst du z.B. mit dem Konstruktor erreichen:

Also so was:
Code:
public class Gui{
  ...
  public String getText(){
    return textField.getText();
  }
}

Code:
public class Logic implements ActionListener{
  private Gui gui;
  public Logic( Gui gui ){
    this.gui = gui;
  }

  public void actionPerformed( ActionEvent e ){
    String text = gui.getText();
  }
}

mfg Beni
 
M

muffi

Gast
ok, wenn ich das so mache habe ich aber folgendes problem:

Gui braucht zur instanziierung ein Logik-objekt, sonst hat sie keinen ActionListener.
und Logic braucht zur instanziierung ein Gui-objekt.

das eine brauch also das andere als parameter.

wie löse ich nun dieses problem??? :cry:
 
B

Beni

Gast
Dann manchst du halt später eine Übergabe:

Code:
public class Logic{
  private Gui gui;

  public void setGui( Gui gui  ){
    this.gui = gui;
  }
}
 

Beliar

Mitglied
Warum schreibst du nciht einfach eine Methode in logic.java, die als parameter ein String Array erwartet.
Dann kannst du beim drücken des save buttons den Text der Textfelder auslesen, in ein Array speichern und der Methode übergeben, die diese Strings in einer DB speichert oder so.
Oder hab ich das problem nicht richtig verstanden?
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben