JavaFX 2.2: How to force neu/aktualisieren einer ListView

Habe ich ein ListView-Steuerelement in eine JavaFX 2 modales dialog-Fenster.

Dieser ListView zeigt DXAlias Instanzen, die ListCells für die hergestellt werden, indem eine Zelle Fabrik. Die wichtigste Sache, die die Fabrik Objekte tun ist, untersuchen Sie die UserData-Eigenschaft Daten des ListView und vergleichen Sie die entsprechenden Artikel auf der ListCell. Wenn Sie identisch sind, wird der Inhalt des ListCell gerendert in rot, sonst schwarz. Ich Tue dies, um anzugeben, welche Elemente in der ListView aktuell ausgewählt ist als "Standard". Hier ist mein ListCell factory-Klasse, so dass Sie sehen können, was ich meine:

private class AliasListCellFactory implements 
    Callback<ListView<DXSynonym>, ListCell<DXSynonym>> {

@Override
public ListCell<DXSynonym> call(ListView<DXSynonym> p) {
    return new ListCell<DXSynonym>() {

    @Override
    protected void updateItem(DXSynonym item, boolean empty) {
        super.updateItem(item, empty);

        if (item != null) {
            DXSynonym dx = (DXSynonym) lsvAlias.getUserData();

            if (dx != null && dx == item) {
                this.setStyle("-fx-text-fill: crimson;");                    
            } else { this.setStyle("-fx-text-fill: black;"); }

            this.setText(item.getDxName());

        } else { this.setText(Census.FORMAT_TEXT_NULL); }
    }};
}

Ich habe einen button-handler namens "handleAliasDefault ()", mit dem sich das ausgewählte Element in der ListView-der neue Standard durch das ausgewählte DXAlias Instanz und speichert diese in der ListView: lsvAlias.setUserData( ausgewählte DXAlias ). Hier ist der hf-code:

//Handler for Button[fx:id="btnAliasDefault"] onAction
    @FXML
    void handleAliasDefault(ActionEvent event) {

        int sel = lsvAlias.getSelectionModel().getSelectedIndex();
        if (sel >= 0 && sel < lsvAlias.getItems().size()) {
            lsvAlias.setUserData(lsvAlias.getItems().get(sel));
        }
    }

Weil die änderung, die in Reaktion auf einen Klick auf die Schaltfläche Standard Festlegen ändern Sie das ListView UserData (), ohne jede änderung, auf die Unterstützung ObservableList, ist die Liste nicht korrekt anzeigen der neue Standard.

Gibt es eine Möglichkeit zu zwingen, eine ListView neu Rendern seinen ListCells? Es gibt eine Billiarde Fragen von Android-Nutzern zu diesem Thema, aber es scheint kein Glück für JavaFX. Ich kann haben, um eine "sinnlose änderung", um die backing-array force redraw.

Sehe ich, dass das gefragt wurde, für JavaFX 2.1: Javafx ListView erfrischend

InformationsquelleAutor scottb | 2013-06-02

Schreibe einen Kommentar