JavaFX 8 Benutzerdefinierte ListView-Zellen ist es das Böse

Habe ich custom ListView-Zelle habe ich HBox mit zwei Steuerelementen:

  1. Etikett mit Namensfeld
  2. Es muss generiert sich aus Kontext-Objekt

Beispielsweise ich ListView-Elemente array von Class-Felder, wenn das Feld Typ Boolean erstelle ich Kontrollkästchen, wenn die Zeichenfolge, die ich erstellen TextField und etc.

Problem ist: ich bekomme Field-Objekt nur in der Methode updateItem() - und nur dort kann ich meine Steuerelemente.

In JavaFX 7 alles Prima funktioniert, aber auf Java-8 - ich sehe nicht ein, meine Steuerelemente.

Ist, besteht die richtige Lösung für meinen Fall?

UPDATE 1

Hier die komplette Beispiel für replizieren problem:

package javafx8listviewexample;

import java.lang.reflect.Field;
import java.net.URL;
import java.util.Date;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.DatePicker;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.TextFieldListCell;
import javafx.util.Callback;

/**
 *
 * @author dmitrynelepov
 */
public class FXMLDocumentController implements Initializable {

    static class TestClassForListView {

        public String fieldString;
        public Date fieldDate;
    }

    static class MyListCell extends ListCell<Field> {

        /**
         * As in tutorial
         *
         * @param t
         * @param bln
         */
        @Override
        protected void updateItem(Field t, boolean bln) {
            super.updateItem(t, bln);
            if (t != null) {
                if (t.getType().equals(String.class)) {
                    System.out.println("Draw string");
                    setGraphic(new TextField(t.getName()));
                } else if (t.getType().equals(Date.class)) {
                    System.out.println("Draw Date");
                    setGraphic(new DatePicker());

                }
            }
        }

    }

    @FXML
    private ListView<Field> listView;

    @FXML
    private void handleButtonAction(ActionEvent event) {
        this.listView.getItems().clear();
        this.listView.setItems(
                FXCollections.observableArrayList(
                        TestClassForListView.class.getFields()
                )
        );
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        this.listView.setCellFactory(new Callback<ListView<Field>, ListCell<Field>>() {

            @Override
            public ListCell<Field> call(ListView<Field> p) {
                return new MyListCell();
            }
        });

    }

}

Hier screenshot-Programm JDK 7

JavaFX 8 Benutzerdefinierte ListView-Zellen ist es das Böse

wie u sehen kann ich TextField fokussiert werden kann und bearbeitet.

Aber wenn ich dieses Beispiel ausführen mit JDK 8 bekam ich

JavaFX 8 Benutzerdefinierte ListView-Zellen ist es das Böse

als hier u können, finden Sie unter TextField kippe werden fokussiert und bearbeitet.

  • Komplett, minimale code zum replizieren Ihre Frage ist wichtig für die Analyse. Wenn Sie weitere Hilfe mit Ihren besonderen Einsatz und möchte jemanden zu untersuchen und zu erklären, warum es nicht funktioniert, müssen Sie code zu replizieren, das Problem in einer Frage bearbeitet, wie eine SSCCE.
  • Während die Frage ist sehr nützlich, könnten Sie bitte aktualisieren Sie die Titel? Es sollte genauer zu reflektieren, was man so böse über benutzerdefinierte ListCell Objekte in javafx8.
Schreibe einen Kommentar