SWT: Werte von Dialog ins Hauptfenster übergeben

haudek

Grünschnabel
Hallo Leute,

ich suche schon eine Weile, finde aber nichts konkretes zu meinem Problem.

Wie kann ich denn bei SWT in eine vorhandene Tabelle, die sich im Hauptfenster befindet Einträge ergänzen. Wobei die neuen Tabellenzeilen im Hauptfenster über ein weiteres Fenster (Dialog mit Textfeldern) ergänzen werden sollen, und der Dialog dabei aber nicht nach jedem bestätigen der eingabe geschlossen wird.

Momentan habe ich es nur gelöst bekommen, indem ich den Dialog nach der Eingabe (neue Zeile) schliesse und die Werte zurückgebe. Ich möchte aber den Dialog offen lassen und die Werte dennoch in die Tabelle des Hauptfensters übergeben und anzeigen.

Würde mich um ein kleines Beispiel sehr freuen.

danke!

gruß
Chris
 
Öhm das hat doch nun nichts mit SWT zu tun?

Schaff doch die Möglichkeit zu deinem Dialog einen Listener hinzuzufügen. Wenn du "Übernehmen" (oder wie auch immer du es nennen willst) drückst, schliesst du den Dialog nicht sondern Informierst nur die Listener über die Ergebnisse der Eingabe. Im Listener werden die Ergebnisse der Tabelle hinzugefügt. Im Dialog setzt du dann die Eingabefelder wieder zurück.
 
Hi,

Du hast schon recht, mit SWT hat das nicht unbedingt was zu tun. Da ich Anfänger bin, dachte ich, vielleicht beeinflusst dies den Lösungsweg.

Wenn ich Dich richtig verstehe, siehst Du nur ein Listener für den Button z.B. "Übernehmen" im Dialog vor. Wenn aber die Tabelle im Hauptfenster definiert ist, wie übergebe ich dann die Werte (für neue Zeile) beim klicken an das Hauptfenster.
Muss ich dann zusätzlich noch die Tabelle aus dem Hauptfenster als Objekt in den Dialog übergeben, oder muss ich im Hauptfenster auch noch ein Listener nutzen?
 
Java:
public interface MyDialogListener {
    public void dialogEvent(MyDialogEvent event);
}
Java:
public class MyDialogEvent {
    //Daten die du aus dem Dialog zurückgeben möchtest
}

Java:
public class MyDialog {
    List<MyDialogListener> listeners = new ArrayList<MyDialogListener>();

    public void addListener(MyDialogListener listener){
           listeners.add(listener);
    }
    
    private void informListeners(MyDialogEvent event){
       for(MyDialogListener listener : listeners){
          listener.dialogEvent(event);
       }
    }
    ............
}

Beim klicken auf den Button rufst du dann informListeners mit einem neuen Event Objekt auf.

In deiner Hautpklasse machst du folgendes:

Java:
MyDialog dialog = new MyDialog(...);
dialog.addListener(new MyDialogListener(){
public void dialogEvent(MyDialogEvent event){
    //daten aus dem Event der Tabelle hinzufügen.
}});
 
Zurück