kostenloser Webspace werbefrei: lima-city


GWT Panel dynamisch mit Radiobuttons erzeugen

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    hk1992

    Moderator Kostenloser Webspace von hk1992

    hk1992 hat kostenlosen Webspace.

    Hi,

    mir stellt sich gerade ein Problem bei meiner Web-Anwendung mit dem Google Web Toolkit: Und zwar habe ich eine Tabelle, deren Länge sich ändern kann, je nach dem wie viele Daten importiert werden (FlexTable). Die Beispieltabelle hat ca. 80 Zeilen. Für jede Zeile möchte ich nun in einer Spalte eine Art Ampel bauen, die sich einstellen lässt und so eine Art Status angibt. Diese Ampel habe ich über RadioButtons realisiert, was auch soweit funktioniert. Allerdings möchte ich für jede Zeile eine Ampel, nicht nur für eine, bzw nicht nur für die, bei denen ich es "von Hand" in den Code schreibe. Mein Code sieht zur Zeit so aus:
    RadioButton rb0 = new RadioButton("Schedule green", "");
    RadioButton rb1 = new RadioButton("Schedule yellow", "");
    RadioButton rb2 = new RadioButton("Schedule red", "");
    rb0.addStyleName("green"); //Verweise für das CSS File
    rb1.addStyleName("yellow");
    rb2.addStyleName("red");
    
    FlowPanel schedule = new FlowPanel(); 
    /* Panel in das die drei Buttons sollen. 
    Von diesem Panel müsste ich eigentlich für jede Zeile eins haben */
    
    for(int i = 0; i <= count; i++){ // Variable count enthält die aktuelle Anzahl der Zeilen
    RootPanel.get("overview").add(schedule); //Das Panel zum Root Panel hinzufügen
    overviewFlexTable.setWidget((i+1), 5, schedule); //Ampel in jeder Zeile anzeigen. Klappt natürlich nicht.
    }


    Ich habe schon versucht, die Buttons in ein Array zu packen, bin damit aber nicht so wirklich weitergekommen, weil ich ein Array mit Panels bräuchte, so wie ich das sehe, aber ein Array was Panels enthält habe ich nicht hinbekommen (geht vermutlich nicht). Eine weitere Idee wäre, mit einer Schleife Panels zu erzeugen, allerdings müsste hier der Name jedes mal geändert werden, was hieße, dass eine Variable im Objektnamen gebraucht würde. Auch das habe ich bisher nicht hinbekommen.
    Ich hoffe, jemand kann helfen.

    Gruß,
    Henning
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Moin,

    wie Du schon richtig erkannt hast, müssen Variablennamen zur Laufzeit eindeutig feststehen.
    Deshalb ist es auch zäh, wenn Du jedes Mal die Variablen aufrufen musst.

    Deine Idee alles in ein Array, eine List oder Map zu packen, ist genau der richtige Ansatz.
    Du schreibst, dass Du die Panels nicht als Array nutzen kannst?
    Das sollte aber problemlos funktionieren...
    Wie schaut denn der Code aus, wo Du das Array kreiert hast?

    Gruß,
    Pawnee
  4. Autor dieses Themas

    hk1992

    Moderator Kostenloser Webspace von hk1992

    hk1992 hat kostenlosen Webspace.

    Habe es doch heute Morgen glatt geschafft. Vielleicht muss man manchmal einfach eine Nacht darüber schlafen. Ich habe es also wirklich über ein Array gelöst. Nun möchte ich drei Ampel-Spalten haben, aber als ich den Code quasi einfach 2mal kopiert habe und natürlich die Namen geändert habe, wurde nurnoch die letzte Spalte mit Ampeln gefüllt, die ersten beiden blieben leer. Der Code sieht so aus:
    private void ampel() {
    		for (int i = 0; i < count; i++) {
    		FlowPanel schedule = new FlowPanel();
    		RadioButton rb0 = new RadioButton("Schedule", "");
    		RadioButton rb1 = new RadioButton("Schedule", "");
    		RadioButton rb2 = new RadioButton("Schedule", "");
    		rb0.addStyleName("green");
    		rb1.addStyleName("yellow");
    		rb2.addStyleName("red");
    		schedule.add(rb0);
    		schedule.add(rb1);
    		schedule.add(rb2);
    			ampel[i] = schedule;
    		}
    	}
    
        public void onData(){
    		FlowPanel[] array = new FlowPanel[count];
    		ampel = array;
    		ampel();
    		for(int i = 0; i < count; i++){
    		    overviewFlexTable.setWidget((i+1), 5, ampel[i]); 
    		}
          }


    Ich glaube mein Fehler war es, dass ich erst nicht die ganze Methode "ampel" in einer Schleife hatte, sondern nur den Teil
    ampel[i] = schedule;

    Dadurch wurde zwar das Array gefüllt, aber immer mit dem selben Objekt. Bei der Ausgabe wurde dann nur eins angezeigt, und zwar das in der letzten Zeile.
    Auch das 2. Problem habe ich in den Griff bekommen, indem ich einfach das FlowPanel Array "array" verdreifacht habe. Komisch, dass war ja nur dazu gut, zu bestimmen wir lang das Array sein muss, bevor die Ampel-Methode ausgeführt wird.

    Beitrag zuletzt geändert: 27.9.2011 8:10:17 von hk1992
  5. Moin,

    ich bin jetzt etwas verwirrt.

    Du sagst Du hättest für beide Probleme etwas gefunden...
    Sind denn jetzt noch Dinge offen, die gelöst werden müssen oder ist es das jetzt gewesen? ;-)

    Gruß,
    Pawnee
  6. Autor dieses Themas

    hk1992

    Moderator Kostenloser Webspace von hk1992

    hk1992 hat kostenlosen Webspace.

    Das wars... ja ist etwas verwirrend, geb' ich zu. Habe da noch ein paar mal in meinem Beitrag rumeditiert, wegen des zweiten Problems.
    Beides ist aber jetzt gelöst und alles funktioniert soweit =)
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!