SWT Sektionen - addExpansionListener

biiqJava

Mitglied
Hallo zusammen,

ich bin total am Verzweifeln. Ich habe folgendes Problem:

Ich habe mehrere Sektion, die ich mit einer FOR-Schleife erstelle. Nun möchte ich den Sektionen ein ExpansionListener zuweisen.

Sieht so aus:

sSektion[ii].addExpansionListener(new ExpansionAdapter() {
public void expansionStateChanged(ExpansionEvent e) {

}});

Nun zu meinem Problem....ich kann den Listener, den einzelnen Sektionen nicht zuordnen, bzw. ich kann die Integer-Variable ii nur verwenden wenn ich die Variable auf 'final' setze.

Hat einer eine Lösungen oder ggf. ein Lösungsvorschlag ?
Zweck der Listener sollen vor allem die Datenübernahme sein, d.h. ich will die Daten der Sektion erst füllen, wenn der Anwender die Sektion auch aufklappt, um beim Firstload die Zeit so gering wie möglich zu halten.

Es müsste praktisch so aussehen:

sSektion[ii].addExpansionListener(new ExpansionAdapter() {
public void expansionStateChanged(ExpansionEvent e) {
fillData(sSektion[ii].getDescription);
}});

Danke im Voraus...:oops:

Edit: Es würde mir helfen, wenn ich den Sektionen sowas wie eine ID zuweisen kann...???:L
 
Zuletzt bearbeitet:

biiqJava

Mitglied
Nein, ich verwende das ii nur für die eine FOR-Schleife, die weiteren sind z.B. jj kk usw.

Aber ich denke ich kann das Problem nicht mit dieser "dynamischen" Schleife lösen. :pueh: Ich muss wahrscheinlich die Sektionen trennen und jedem einzelnen den Listenere dranhängen -.-

Falls jemand trotzdem ein anderen Vorschlag hat, wäre ich echt dankbar...
 

faetzminator

Gesperrter Benutzer
Am besten zeigst du uns etwas Code. Mit deinem Text kann ich nicht viel anfangen. Bitte schreib den Code hier im Forum gleich in Javatags (und formatier ihn halbwegs).
 

biiqJava

Mitglied
Java:
                //Zeitperioden
                final String[] timeZones = { "Gestern", "Diesen Monat",
				"Letzter Monat", "Dieses Jahr", "Total" };
                //Bereiche
		final String[] zones = { "Wareneingang", "Kommissionierung",
				"Warenausgang", "Versand" };

		//Erstelle Sektionen für Bereiche
		for (int ii = 0; ii < timeZones.length; ii++) {

			sSektion[ii] = toolkit.createSection(csLeft, Section.TITLE_BAR
					| Section.TWISTIE | Section.EXPANDED);
			sSektion[ii].setLayoutData(new GridData(SWT.FILL, SWT.FILL, false,
					false));
			sSektion[ii].setText(timeZones[ii]);
			
			sSektion[ii].addExpansionListener(new ExpansionAdapter() {
				public void expansionStateChanged(ExpansionEvent e) {
                                        //Hole Daten
					summe = fillDataWert(ii+1);
				        datum = fillDataDatum(ii+1);					
				}});

	                //Alle Sektionen, außer 'Gestern', zuklappen
			sSektion[ii].setExpanded(false);

                        //Sektion 'Gestern' bereits beim Programmstart geöffnet
			if(timeZones[ii].equalsIgnoreCase("Gestern")){
				sSektion[ii].setExpanded(true);
				summe = fillDataWert(ii+1);
				datum = fillDataDatum(ii+1);
			}

			csComposite[ii] = toolkit.createComposite(sSektion[ii], SWT.NONE);
			csComposite[ii].setLayout(new GridLayout(3, false));
			toolkit.paintBordersFor(csComposite[ii]);
			sSektion[ii].setClient(csComposite[ii]);

			toolkit.createLabel(csComposite[ii], "");
			toolkit.createLabel(csComposite[ii], "   Durchschnittswert/Tag    ");
			toolkit.createLabel(csComposite[ii], "Höchstwert am Tag");
			
                        //Erstelle Felder für die Sektionen und fülle mit Daten
			for (int zz = 0; zz < zones.length; zz++) {
				toolkit.createLabel(csComposite[ii], zones[zz]);

				String strWert = "";
				if(!summe.isEmpty())
					strWert = GeneralSettings.df.format(summe.get(zz));

				lblWert[zz] = toolkit.createLabel(csComposite[ii], strWert, SWT.RIGHT);
				lblWert[zz].setLayoutData(new GridData(120, SWT.DEFAULT));
				
				String strDate = "";
				if(!datum.isEmpty())
					strDate = DateFormatter.toNormalDate(datum.get(zz));

				lblDatum[zz] = toolkit.createLabel(csComposite[ii], strDate, SWT.RIGHT);
				lblDatum[zz].setLayoutData(new GridData(100, SWT.DEFAULT));
				
			}
	
		}
 

biiqJava

Mitglied
Also nochmal das Problem:

Java:
sSektion[ii].addExpansionListener(new ExpansionAdapter() {
                public void expansionStateChanged(ExpansionEvent e) {
                                        //Hole Daten
                    summe = fillDataWert(ii+1);
                        datum = fillDataDatum(ii+1);                    
                }});

Ich muss wissen "welche" Sektion angeklickt wurde, damit ich sagen kann "Hol dir die Werte für die Sektion '??' und stell die Werte in die Felder.
 

Oben