使用javafx tableview控件时彻底解决单元格可编辑且可监听

看了很多中文资料没找到完善的对javafx tableview控件的完善资料,又苦于没空精读官网资料(毕竟用语晦涩,感觉故意刁难……),本人整理如下:

1.实现单元格文本属性可编辑+可监听

代码如下:

C8.setCellFactory(TextFieldTableCell.forTableColumn());

//c8为你的列名称,自定义

 

@FXML
public void function1(TableColumn.CellEditEvent<Student,String> value) {

//function1为你在scenebuild中绑定的的该列的onAction名称,自定义

//Student和String为表格的数据对象和数据类型,更具实际情况自定义

 

TableColumn<Student, String> tc = value.getTableColumn();//获取了正在编辑的列命名为tc
Student std = value.getRowValue();
//获取了正在编辑的行
System.out.println(tc.getCellData(std));
//打印了正在编辑的单元格的值旧值
System.out.println(value.getNewValue());
//打印了正在编辑的单元格的值旧值
}

 

 

2.实现单元格comboBox属性可编辑+可监听

options = FXCollections.observableArrayList(
                                "+2",
                                "-2",
                                "小组加分"                  
                            );
                    
                    C9.setCellFactory
(tc -> {//combobox定义与监听
                        ComboBox<String> combo = new ComboBox<String>();
                        combo.setItems(options);
                        combo.setEditable(true);
                        TableCell<Student, String> cell = new TableCell<Student, String>() {
                            protected void updateItem(String chuzhi, boolean empty) {
                                super.updateItem(chuzhi, empty);
                                if (empty) {
                                    setGraphic(null);
                                } else {
                                    combo.setValue(chuzhi);
                                    setGraphic(combo);
                                }
                            }
                        };
                        combo.setOnAction
(e -> {
                            int rank = cell.getIndex();//获取正在编辑的单元格所在行序号
                            String value = combo.getValue();//获取正在编辑的单元格值


//具体监听事件根据需要修改这里只是我的情况,关键的看蓝色字体和注释
                            if(value.equals(options.get(0))  ||  value.equals(options.get(1) ))//1  2选项
                            {

                                  //写自己的选择项功能

                            }
                          
 if(value.equals(options.get(2)))//3选项
                             {

                                   //写自己的选择项功能  
                            }
                           
           
 });
                                
                        return cell;
                    
});//注意括号

效果如下

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星云牛马

帮到您的话,可否请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值