Anzeige:
Ergebnis 1 bis 6 von 6

Thema: SWT: im Hauptfenster anzeigen, über Dialog hinzufügen

  1. #1
    Registrierter Benutzer
    Registriert seit
    25.11.2007
    Beiträge
    5

    SWT: im Hauptfenster anzeigen, über Dialog hinzufügen

    Hallo,

    ich suche Hilfe!!! Vielleicht könnt Ihr mir weiterhelfen?
    Wäre super, danke im voraus!!

    Ich habe folgendes Problem:
    Ich möchte im Hauptfenster eine Tabelle anzeigen, die über ein Dialogfenster editiert wird. Z.B. im Dialogfenster neue Zeilen dieser Tabelle des Hauptfensters hinzufügen. Wichtig dabei ist, dass die neue Zeile in der Tabelle im Hauptfenster ergänzt werden soll, während das Dialogfenster geöffnet bleibt. . Der Dialog soll erst durch ein Button geschlossen werden.

    Mit meinem bisherigen Code schaffe ich es nur eine neue Zeile im Hauptfenster hinzuzufügen, indem ich den Dialog sofort nach jeder neuen Zeile schliessen lasse. (..while Schleife in der open Methode)


    Hauptfenster:
    Code:
    ... 
    protected void neuerwettbewerber() { 
       EingabeDialog eingabe = new EingabeDialog(sShell); 
          String[] wetten = eingabe.open(); 
          TableItem item = new TableItem(table, SWT.NONE); 
          item.setText(wetten); 
       }
    Dialog:
    Code:
    ... 
    public EingabeDialog(Shell shell) { 
    } 
    ..... 
    private void createSShell() { 
       GridLayout gridLayout1 = new GridLayout(); 
       gridLayout1.numColumns = 1; 
       sShell = new Shell(SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM); 
       sShell.setText("Shell"); 
       sShell.setVisible(true); 
       createComposite(); 
       createComposite1(); 
       sShell.setLayout(gridLayout1); 
       sShell.setSize(new Point(235, 200)); 
    } 
    ...... 
    
    public String[] open() { 
       createSShell(); 
       Display display = sShell.getDisplay(); 
       while (!sShell.isDisposed()) { 
          if (!display.readAndDispatch()) 
               display.sleep(); 
          } 
          return eingabefelder; 
       }

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Du darfst den Datentransfer nicht über den Rückgabewert einer Methode machen, sondern entweder einen Callback/Listener Ansatz verwenden, oder dem Dialog eine Referenz auf die Tabelle mitübergeben.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    25.11.2007
    Beiträge
    5

    Question

    Ich bin noch ein Java Greenhorn.
    Ich bin mit den Angaben leider noch nicht weiter gekommen.
    Könntest Du mir ein kleines Beispiel geben?
    Wäre nett!!

    gruß
    Chris

  4. #4
    Registrierter Benutzer Avatar von Waxolunist
    Registriert seit
    19.06.2006
    Ort
    Wien
    Beiträge
    485
    Also entweder über einen Listener (der wohl schönste und eleganteste Ansatz) oder du übergibst das Table-Object in der Methode neuerwettbewerber().
    Spezialitäten heute: PLSQL, TSQL, Java (alles mit Webanwendungen), Groovy, Grails, ASP.NET, Javascript, Python, Django
    Straight through, ohne Umwege ans Ziel

  5. #5
    Registrierter Benutzer
    Registriert seit
    25.11.2007
    Beiträge
    5
    Ich bin mit der Alternative - Tabelle als Objekt übergeben - weiter gekommen.
    Vielen Dank!

    Wie das mit dem Listener gehen soll, habe ich bisher nicht hinbekommen.

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Im Grunde genommen, ist das praktisch das selbe, nur dass der Dialog nicht konkret weiß, wohin er seine Eingaben macht.

    Vereinfacht sieht das bei dir jetzt vermutlich so aus

    Code:
    class Hauptfenster
    {
        private Table table;
    
        void neuerBewerber()
        {
            Dialog dialog = new Dialog(table);
            // usw.
        }
    }
    
    class Dialog
    {
        private Table table;
    
        public Dialog(Table table)
        {
            this.table = table;
        }
    
        public void open()
        {
            TableItem item = new TableItem(table);
            item.setText(text);
        }    
    }
    Mit einem Interface wird das ganze ein bischen entkoppelt

    Code:
    public interface ItemAdder
    {
        public void addItem(String[] text);
    };
    
    class Hauptfenster implements ItemAdder
    {
        private Table table;
    
        void neuerBewerber()
        {
            Dialog dialog = new Dialog(this);
            // usw.
        }
    
        void addItem(String[] text)
        {
            TableItem item = new TableItem(table);
            item.setText(text);
        }
    }
    
    class Dialog
    {
        private ItemAdder adder;
    
        public Dialog(ItemAdder adder)
        {
            this.adder = adder;
        }
    
        public void open()
        {
            adder.addItem(text);
        }    
    }
    Man kann das dann noch so erweitern, dass man Dialog den ItemAdder nicht im Kontruktor übergibt, sondern über eine Methode hinzufügt und der Dialog eine ganze Liste von ItemAddern kennt, denen er die Daten gibt.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •