JavaFX Eigene ListCell Problem(Objekte werden doppelt angezeigt)

Jtobi

Neues Mitglied
Hallo, ich habe gerade erst mit Java angefangen und bin auf ein Problem gestoßen bei dem mir Google ausnahmsweise nicht weiterhelfen kann.
Mit dem Ziel die Zellen einer ListView zu formatieren habe ich folgende Klasse erstellt:

Java:
public class WorkoutListCell extends ListCell<Workout> {

	private DateFormat formatter = new SimpleDateFormat("30 MMMM, yyyy");

	@Override
	public void updateItem(Workout workout, boolean empty) {
		super.updateItem(workout, empty);
		if (empty) {
			setText(null);
		} else {

			setText(null);

			GridPane grid = new GridPane();
			grid.setHgap(10);
			grid.setVgap(0);

			Label name = new Label(workout.toString());
			name.getStyleClass().add("workout-list-name");
			grid.add(name, 0, 0);

			Label startDate = new Label(formatter.format(workout.getStartTime()));
			startDate.getStyleClass().add("workout-list-date");
			grid.add(startDate, 0, 1);

			setGraphic(grid);
		}
	}
}

Die Formatierung funktioniert wie erwartet. Aber sobald ich mehr als 1 Element zur Liste hinzufüge wird das erste Element doppelt dargestellt.

Hier ein paar Screenshots:

Beim ersten Element(soweit alles normal):
1cluzdnstk6.jpg


Beim zweiten Element:
21okvtew0fb.jpg


Beim dritten Element:
3lxrj573pgb.jpg


Sobald ich die Formatierung entferne tritt das Problem nicht mehr auf.
Die falschen Einträge lassen sich auch nicht markieren.

Ich hoffe ihr könnt mir helfen.

MfG, Tobi
 
Ich hab das Problem mit folgender Änderung gelöst:

Java:
public class WorkoutListCell extends ListCell<Workout> {
 
    private DateFormat formatter = new SimpleDateFormat("30 MMMM, yyyy");
 
    @Override
    public void updateItem(Workout workout, boolean empty) {
        super.updateItem(workout, empty);
        if (empty) {
            setText(null);
            setGraphic(null);
        } else {
            //Body hier weggelassen
        }
    }
}

Ich hatte vergessen die Grafik zurückzusetzen.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben