,可以通过以下步骤实现:
import javafx.application.Application;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;
public class Person {
private String name;
private boolean selected;
public Person(String name) {
this.name = name;
this.selected = false;
}
public String getName() {
return name;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
}
public class MainApp extends Application {
private ObservableList<Person> data = FXCollections.observableArrayList();
@Override
public void start(Stage primaryStage) {
TableView<Person> table = new TableView<>();
table.setEditable(true);
TableColumn<Person, String> nameCol = new TableColumn<>("Name");
nameCol.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
TableColumn<Person, Boolean> selectCol = new TableColumn<>("Select");
selectCol.setCellValueFactory(cellData -> {
Person person = cellData.getValue();
SimpleBooleanProperty property = new SimpleBooleanProperty(person.isSelected());
property.addListener((observable, oldValue, newValue) -> person.setSelected(newValue));
return property;
});
selectCol.setCellFactory(new Callback<TableColumn<Person, Boolean>, TableCell<Person, Boolean>>() {
@Override
public TableCell<Person, Boolean> call(TableColumn<Person, Boolean> param) {
return new CheckBoxTableCell<>();
}
});
table.getColumns().addAll(nameCol, selectCol);
table.setItems(data);
VBox vbox = new VBox(table);
Scene scene = new Scene(vbox);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
public class CheckBoxTableCell<S, T> extends TableCell<S, T> {
private final CheckBox checkBox;
public CheckBoxTableCell() {
this.checkBox = new CheckBox();
this.checkBox.setOnAction(event -> {
S rowData = getTableView().getItems().get(getIndex());
TableColumn<S, T> column = getTableColumn();
ObservableValue<T> observableValue = column.getCellObservableValue(rowData);
T value = observableValue.getValue();
if (value instanceof Boolean) {
column.getCellObservableValue(rowData).setValue((T) checkBox.isSelected());
}
});
setGraphic(checkBox);
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
setEditable(true);
}
@Override
protected void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
} else {
checkBox.setSelected((Boolean) item);
setGraphic(checkBox);
}
}
}
这是一个使用JavaFX中的CheckBox更新TableRow的示例。在这个示例中,我们创建了一个TableView,并在其中的一列中使用了CheckBox。当用户选择或取消选择CheckBox时,对应行的数据模型中的selected属性将会更新。这个示例可以用于实现一些需要用户选择多个行的功能,例如批量操作或筛选数据。
腾讯云相关产品和产品介绍链接地址:
请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。
Game Tech
Game Tech
Game Tech
云+社区沙龙online第5期[架构演进]
企业创新在线学堂
企业创新在线学堂
云+社区技术沙龙[第6期]
云+社区技术沙龙[第7期]
开箱吧腾讯云
领取专属 10元无门槛券
手把手带您无忧上云