Gå til innhold

Anbefalte innlegg

Jeg jobber for tiden med å lage et program som henter data fra en database og skal deretter kartlegge disse dataene til dynamiske checkboxer. Disse checkboxene skal deretter opprette punkter på et kart. Dette gjøres ved å bruke koordinatene som er lagret i databasen. Jeg utvikler i GWT og bruker GXT som bibliotek for å opprette checkboxene. Jeg bruker Openlayers_gwt for å opprette kartet.

 

Jeg har kommet så langt at jeg henter ut dataene fra databasen og lagrer dette i tabeller. Problemet mitt da er å opprette dynamiske checkboxer for de ulike radene i databasen. Det jeg altså vil er at når jeg trykker på en knapp, så skal lytteren til denne knappen koble til databasen for å sjekke hvor mange rader det er og opprette checkboxer deretter.

 

Under kan du se metoden til denne knappen:

private void addListenerToButton() {
	getLayersEventListener.getLayersButton.addSelectionListener(new SelectionListener<ButtonEvent>() { 
		  @Override
	      public void componentSelected(ButtonEvent ce) { 
			  layerPanelWest.getLayerContentsPanel().setLayoutOnChange(true);

			  ConnectionServiceAsync greetingService = (ConnectionServiceAsync) GWT.create(ConnectionService.class);
			  ServiceDefTarget endpoint = (ServiceDefTarget) greetingService;
			  endpoint.setServiceEntryPoint("/ConnectionService");
			  greetingService.getConnection(new AsyncCallback<Object>() {
				  @Override
				  public void onFailure(Throwable caught) {
					  Window.alert("Something went wrong");
					  System.out.print(caught);
				  }

				  @Override
				  public void onSuccess(Object result) {
					  LayerDataSource source = new LayerDataSource((LayerData[]) result);

					  // Get values from the first cells and generate checkboxes
					  for (int i = 0; i < source.getLength(); ++i) {
						  cell0 = source.getIntCell(i,0);
						  cell1 = source.getStringCell(i,1);
						  cell2 = source.getStringCell(i,2);
						  cell3 = source.getDoubleCell(i,3);
						  cell4 = source.getDoubleCell(i,4);

						  layer = new CheckBox();
						  layer.setBoxLabel(cell1);

						  layerPanelWest.getLayerContentsPanel().add(layer);

						  final Point point = new Point(cell3, cell4);
						  final VectorFeature pointFeature = new VectorFeature(point);

						  layer.addListener(Events.OnClick, new Listener<FieldEvent>() {
							  public void handleEvent(FieldEvent be) {
								  if (layer.getValue()) {
									  if (layer.getBoxLabel().equals(cell1)) {
										  MapWidgetGIS.getVectorLayer().addFeature(pointFeature);
									  } else {
										  Window.alert("Point name (" + cell1 + ") is not equivalent with (" + layer.getBoxLabel() + ").");
									  }
								  } else {
									  MapWidgetGIS.getVectorLayer().removeFeature(pointFeature);
								  }
							  }
						  });
					  }
				  }
			  });
	      }  
	});
}

 

Slik som koden er nå, så er det bare den siste checkboxen som er opprettet som fungerer. Dette er selvfølgelig fordi den går gjennom en for-løkke. Spørsmålet mitt da er hvordan jeg kan tildele ulik informasjon til hver enkelt checkbox? Håper koden er tilstrekkelig nok for å skjønne problemet. Setter STOR pris på hjelp!

Lenke til kommentar
Videoannonse
Annonse

Kikk på layer = new CheckBox()

Da layer tydeligvis er definert utenfor løkken, vil layer bli et nytt CheckBox Object for hver iterasjon. Du må definere en egen CheckBox for hver iterasjon.

Feks kjøre CheckBox layer = new CheckBox() i løkken, hvis du ikke skal benytte objektet utenfor løkken.

Lenke til kommentar

Kikk på layer = new CheckBox()

Da layer tydeligvis er definert utenfor løkken, vil layer bli et nytt CheckBox Object for hver iterasjon. Du må definere en egen CheckBox for hver iterasjon.

Feks kjøre CheckBox layer = new CheckBox() i løkken, hvis du ikke skal benytte objektet utenfor løkken.

 

Jeg har prøvd det (hvis jeg forstår deg rett) og det fungerer ikke. Jeg kan prøve å forenkle problemet:

 

Si at jeg har tre rader i en database med 5 kolonner i hver rad (ID, Navn, Beskrivelse, Lengdegrad, Breddegrad). Så henter jeg ut disse dataene og så vil jeg deretter opprette en CheckBox for hver rad med de tilhørende dataene. Hvordan gjør man dette? Kan man f.eks. lagre checkboxen i en array og deretter hente de ut derfra? Det jeg i bunn og grunn prøver på er å opprette objekter dynamisk ut fra det som ligger lagret i databasen...

Lenke til kommentar

Det er mulig. Du kan foreksempel bruke en ArrayList<CheckBox>.

 

Før løkka:

ArrayList<CheckBox> checkBoxes = new ArrayList<CheckBox>();

 

Inne i løkka:

CheckBox box = new CheckBox();

checkBoxes.add(box);

 

Så kan du gå gjennom dem med en foreach løkke når du skal bruke dem.

for(CheckBox box : checkBoxes){

layoutPanel.add(box);

}

Lenke til kommentar

Det er mulig. Du kan foreksempel bruke en ArrayList<CheckBox>.

 

Før løkka:

ArrayList<CheckBox> checkBoxes = new ArrayList<CheckBox>();

 

Inne i løkka:

CheckBox box = new CheckBox();

checkBoxes.add(box);

 

Så kan du gå gjennom dem med en foreach løkke når du skal bruke dem.

for(CheckBox box : checkBoxes){

layoutPanel.add(box);

}

 

Jeg fikk det til. Jeg lagret checkboxene i en HashMap etterhvert som jeg opprettet de og det fungerer perfekt. Takk for hjelpen!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...