我试图在我的桌面视图中自动包含数字。
我有2个具有相似结构的表,其目的是在按钮点击时将所选项目从tableA复制到tableB。
总列数:3
RowCol =应该自动显示数字
TestCol =测试名称(来自Model类)
ModCol = Module(来自Model类)
我遇到了这个问题来解决tableA的自动编号问题 auto numbered table rows (javafx)
代码:
tableARowCol.setCellValueFactory(cellData -> new ReadOnlyObjectWrapper<Number>(
tableA.getItems().indexOf(cellData.getValue()) + 1));
tableATestCol.setCellValueFactory(cellData -> cellData.getValue().testCaseNameProperty());
tableAModCol.setCellValueFactory(cellData -> cellData.getValue().moduleNameProperty());
这适用于tableA,我对tableB使用相同的代码,但是我遇到以下问题(在btn点击上添加数据时,自动编号没有正确更新):
在图像中,tableB的行号显示为1,2,3,3,3,2,7 当我执行以下操作时,这是输出:
我想知道什么似乎是问题,我该如何解决它。说实话,我不完全理解自动编号行的行。
到目前为止发生的事情的流程:
值得一提:
tableB行编号的代码:
tableBRowCol.setCellValueFactory(cellData -> new ReadOnlyObjectWrapper<Number>(
tableB.getItems().indexOf(cellData.getValue()) + 1));
tableBTestCol.setCellValueFactory(cellData -> cellData.getValue().testCaseNameProperty());
tableBModCol.setCellValueFactory(cellData -> cellData.getValue().moduleNameProperty());
提前感谢您的帮助!
答案 0 :(得分:1)
问题在于您使用FolderMonitor.NotifyFilter = NotifyFilters.Attributes;
中的项目列表来确定tableA
中的索引。
可是:
不要使用这种方法!
我知道很多用户赞同您使用的答案,但它有一些严重的问题。如果tableB
列表中有多个项目相同或甚至(如您的情况)相同,则索引将始终是items
中找到的第一个项目。
而是使用List
提供的index
属性,这也将消除对列表中项目的低效搜索,该列表的最差运行时间为TableCell
其中{ {1}}是O(n)
列表的大小...
以下是@ jewelsea的答案的一个小变化:
n
可以这样使用:
items