Obtenez Case valeur dans un tableau en JavaFX

J'ai une table et il a une colonne avec des cases à cocher.

Obtenez Case valeur dans un tableau en JavaFX

Sur un clic sur un bouton, je veux savoir qui les cases sont cochées et qui ne le sont pas.
Jusqu'à présent j'ai réussi à créer des cases à cocher dans un tableau.
Le code est comme suit.

public class TTEs implements Initializable {
@FXML
private TableView<TestObject> tableReport;
@FXML
private TableColumn<TestObject, String> name;
@FXML
private TableColumn<TestObject, Boolean> checkbox;
@FXML
public void getValues() {        
//the method will get what check boxes are checked (this part is the problem)
}
@Override
public void initialize(URL arg0, ResourceBundle arg1) { 
ObservableList<TestObject> data = FXCollections.observableArrayList();
data.add(new TestObject("Test 1", true));
data.add(new TestObject("Test 2", false));
tableReport.setItems(data);
name.setCellValueFactory(new PropertyValueFactory<TestObject, String>("name"));
checkbox.setCellValueFactory(new PropertyValueFactory<TestObject, Boolean>("checked"));
checkbox.setCellFactory(new Callback<TableColumn<TestObject, Boolean>,
TableCell<TestObject, Boolean>>() {
public TableCell<TestObject, Boolean> call(TableColumn<TestObject, Boolean> p) {
return new CheckBoxTableCell<TestObject, Boolean>();
}
});
}
//CheckBoxTableCell for creating a CheckBox in a table cell
public static class CheckBoxTableCell<S, T> extends TableCell<S, T> {
private final CheckBox checkBox;
private ObservableValue<T> ov;
public CheckBoxTableCell() {
this.checkBox = new CheckBox();
this.checkBox.setAlignment(Pos.CENTER);
setAlignment(Pos.CENTER);
setGraphic(checkBox);
} 
@Override public void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
setGraphic(checkBox);
if (ov instanceof BooleanProperty) {
checkBox.selectedProperty().unbindBidirectional((BooleanProperty) ov);
}
ov = getTableColumn().getCellObservableValue(getIndex());
if (ov instanceof BooleanProperty) {
checkBox.selectedProperty().bindBidirectional((BooleanProperty) ov);
}
}
}
}
}

Quand je debug, je trouve que:

        ov = getTableColumn().getCellObservableValue(getIndex());
if (ov instanceof BooleanProperty) {
checkBox.selectedProperty().bindBidirectional((BooleanProperty) ov);
}

Dans la condition ci-dessus, il ne va jamais à l'intérieur de la if déclaration, ce qui signifie que le ov n'est pas une instance de BooleanProperty. Mais lorsque j'imprime la classe de ov,

System.out.println(ov.getClass().getName());

il imprime comme

javafx.beans.property.ReadOnlyObjectWrapper

ReadOnlyObjectWrapper est une sous-classe de BooleanProperty, alors pourquoi est le instanceof le contrôle n'a pas de travail?

  • Double - stackoverflow.com/questions/13459936/...
  • Nono, c'est en java swing. Ma demande est à l'aide de javaFX. Il y a beaucoup de différence.
  • gotozero réponse ci-dessous a travaillé pour moi et m'a pris environ une minute à mettre en œuvre. Aucune modification de code nécessaire si vous utilisez fxml.
  • si vous souhaitez vérifier les sous-classes que vous pouvez utiliser if (BooleanProperty.class.isAssignableFrom(myObject.getClass()))
InformationsquelleAutor Ravindu | 2014-01-02