У меня есть таблица, и у нее есть строка с флажком.Получить значение флажка в таблице в JavaFX
Что я хочу сделать, это нажать кнопку «Я хочу узнать, какие флажки отмечены, а какие нет. Пока мне удалось создать флажки в таблице. Код выглядит следующим образом.
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);
}
}
}
}
}
когда я debugg, я обнаружил, что,
ov = getTableColumn().getCellObservableValue(getIndex());
if (ov instanceof BooleanProperty) {
checkBox.selectedProperty().bindBidirectional((BooleanProperty) ov);
}
в вышеприведенном Condtion, он никогда не заходит внутрь, если. Означает, что экземпляр ovis i = nota, если имеет значение Boolean. Но когда я печатаю класс OV,
System.out.println(ov.getClass().getName());
он печатает, как
javafx.beans.property.ReadOnlyObjectWrapper
ReadOnlyObjectWrapper подкласс BooleanProperty
Дубликат - http://stackoverflow.com/questions/13459936/get- row-values-of-ticked-checkbox-in-jtable – user3029101
Noo, то есть в java swing. Мое приложение использует javaFX. Там много различий. – Ravindu
gotozero ответ ниже работал для меня и занял около минуты, чтобы реализовать. Никаких изменений кода не требуется, если вы используете fxml. –