JavaFX8将谓词绑定改为按键操作
我有一个表格视图,每列都有文本框。如果我在其中一个文本框中写入内容,tableview将根据所有文本框进行过滤。目前,我的代码监听文本框中的更改,并在文本更改时进行过滤。下面的代码工作得很好,但是有什么方法可以提高效率吗 也许最好的方法是听回车键,而不是过滤文本字段中的每一个更改?predicateProperty支持这一点吗?如果不是,我如何从predicateProperty/binding改为onKey pressJavaFX8将谓词绑定改为按键操作,javafx,tableview,Javafx,Tableview,我有一个表格视图,每列都有文本框。如果我在其中一个文本框中写入内容,tableview将根据所有文本框进行过滤。目前,我的代码监听文本框中的更改,并在文本更改时进行过滤。下面的代码工作得很好,但是有什么方法可以提高效率吗 也许最好的方法是听回车键,而不是过滤文本字段中的每一个更改?predicateProperty支持这一点吗?如果不是,我如何从predicateProperty/binding改为onKey press filteredItems.predicateProperty().bin
filteredItems.predicateProperty().bind(Bindings.createObjectBinding(()
-> li -> {
for (int i = 0; i < li.size(); i++) {
{
if (!li.get(i).toLowerCase().
contains(
listOfTxtFields.get(i).getText().toLowerCase()
)) {
return false;
}
}
}
return true;
},
listOfTxtFields.stream().map(TextField::textProperty)
.collect(Collectors.toList())
.toArray(new StringProperty[listOfTxtFields.size()])));
filteredItems.predicateProperty().bind(Bindings.createObjectBinding()
->李->{
对于(int i=0;i
实际上,我通过一些实验解决了这个问题。这是非常有效的,但是当它变成成吨的行时可能会快一点,所以如果你有任何加快速度的建议,我很乐意听到。这就是我所做的:
创建了一个方法,该方法将在用户每次在列中的文本字段上按enter键时调用:
空过滤器(){
DateTest DateTest=new DateTest();
filteredItems.setPredicate(li->{
对于(int i=0;i
可能是eventfilter解决方案吗?加载lambda的速度也很慢,但原因是我的日期检查器很丑。。还有什么建议吗?
DateTest dateTest = new DateTest();
filteredItems.setPredicate(li -> {
for (int i = 0; i < li.size(); i++) {
if (dateTest.isValidDate(listOfTxtFields.get(i).getText().replace("a", "").replace("b", ""))) {
try {
dateTest.isValidDate(li.get(i));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse(li.get(i));
Date date2 = sdf.parse(listOfTxtFields.get(i).getText().replace("a", "").replace("b", ""));
if (listOfTxtFields.get(i).getText().contains("a")) {
if (date1.after(date2)) {
return true;
}
}
if (listOfTxtFields.get(i).getText().contains("b")) {
if (!date1.before(date2)) {
return false;
}
} else {
if (!date1.equals(date2)) {
return false;
}
}
} catch (ParseException ex) {
Logger.getLogger(Table.class.getName()).log(Level.SEVERE, null, ex);
}
} else {
if (!li.get(i).toLowerCase().
contains(
listOfTxtFields.get(i).getText().toLowerCase()
)) {
return false;
}
}
}
return true;
});
}