当前位置:   article > 正文

JavaFx实现TableView数据全选/取消全选功能_javafx tableview全选

javafx tableview全选

最近做了一个桌面应用,使用到TableView显示查询到的设备信息,设备比较多,一个个勾选不方便,使用人员建议增加全选功能,本文通过使用CheckBox控件完成功能开发。

主要修改如下:

1.fxml

  1. <CheckBox fx:id="mSelectAll" layoutX="33.0" layoutY="75.0" onAction="#selectAll"
  2. text="全选" />
  3. <TableView id="table_view" fx:id="mTable" layoutX="33.0" layoutY="100.0" prefHeight="450.0"
  4. prefWidth="1100.0">
  5. <columns>
  6. <TableColumn fx:id="mColumnSelect" prefWidth="58" resizable="false" sortable="false"
  7. text="SELECT" visible="true" style="-fx-alignment:CENTER"></TableColumn>
  8. ...
  9. </columns>
  10. ...
  11. </TableView>

2.Controller

  1. @FXML
  2. private TableView<DeviceInfo> mTable;
  3. @FXML
  4. private TableColumn<DeviceInfo, CheckBox> mColumnSelect;
  5. @FXML
  6. private CheckBox mSelectAll;
  7. /**
  8. * 对checkbox勾选去勾选处理
  9. */
  10. public void selectAll() {
  11. ObservableList<DeviceInfo> items = mTable.getItems();
  12. if (mSelectAll.isSelected()) {
  13. for (DeviceInfo deviceInfo : items) {
  14. deviceInfo.getCb().setSelected(true);
  15. }
  16. } else {
  17. for (DeviceInfo deviceInfo : items) {
  18. deviceInfo.getCb().setSelected(false);
  19. }
  20. }
  21. }
  22. @FXML
  23. private void initialize() {
  24. ...
  25. Callback<TableColumn<DeviceInfo, CheckBox>, TableCell<DeviceInfo, CheckBox>>
  26. selectCellFactory =
  27. new Callback<TableColumn<DeviceInfo, CheckBox>, TableCell<DeviceInfo, CheckBox>>() {
  28. @Override
  29. public TableCell call(TableColumn p) {
  30. TableCell cell = new TableCell<DeviceInfo, CheckBox>() {
  31. @Override
  32. public void updateItem(CheckBox item, boolean empty) {
  33. super.updateItem(item, empty);
  34. setGraphic(item);
  35. if (item != null) {
  36. //初始化复选框-监听-所有checkbox复选框都勾选则全选框勾选,所有checkbox复选框不勾选则全选框不勾选
  37. item.selectedProperty()
  38. .addListener(new ChangeListener<Boolean>() {
  39. @Override
  40. public void changed(
  41. ObservableValue<? extends Boolean> observable,
  42. Boolean oldValue, Boolean newValue) {
  43. boolean booSelectAll = true;
  44. for (DeviceInfo deviceInfo : mTable
  45. .getItems()) {
  46. if (!deviceInfo.getCb().isSelected()) {
  47. booSelectAll = false;
  48. break;
  49. }
  50. }
  51. mSelectAll.setSelected(booSelectAll);
  52. }
  53. });
  54. }
  55. }
  56. };
  57. return cell;
  58. }
  59. };
  60. mColumnSelect.setCellFactory(selectCellFactory);
  61. // 初始化所有checkbox复选框
  62. mColumnSelect.setCellValueFactory(cellData -> cellData.getValue().getCb().getCheckBox());
  63. ...
  64. }

Controller文件中通过FXML注解控件及进行选择列的初始化。

其中对CheckBox进行封装

  1. public class Checkbox {
  2. private CheckBox checkbox = new CheckBox();
  3. public ObservableValue<CheckBox> getCheckBox() {
  4. return new ObservableValue<CheckBox>() {
  5. @Override
  6. public void addListener(ChangeListener<? super CheckBox> listener) {
  7. }
  8. @Override
  9. public void removeListener(ChangeListener<? super CheckBox> listener) {
  10. }
  11. @Override
  12. public CheckBox getValue() {
  13. return checkbox;
  14. }
  15. @Override
  16. public void addListener(InvalidationListener listener) {
  17. }
  18. @Override
  19. public void removeListener(InvalidationListener listener) {
  20. }
  21. };
  22. }
  23. public Boolean isSelected() {
  24. return checkbox.isSelected();
  25. }
  26. public void setSelected(boolean selected) {
  27. checkbox.setSelected(selected);
  28. }
  29. }

测试使用的Bean

  1. public class DeviceInfo {
  2. /**
  3. * 是否选中
  4. */
  5. private Checkbox cb = new Checkbox();
  6. ...
  7. public Checkbox getCb() {
  8. return cb;
  9. }
  10. public void setSelected(Checkbox cb) {
  11. this.cb = cb;
  12. }
  13. }

备注:以上代码,与全选功能无关的功能代码已经略去。

运行效果:

checkbox实现全选,取消全选效果视频

微信扫描关注更精彩
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/191713
推荐阅读
相关标签
  

闽ICP备14008679号