我感觉到你了 . 表是应用程序中最常见的事情之一,它在JavaFX中实现的方式最令人尴尬(当您更改单元格时丢失数据的焦点错误仍未解决)并且在现实世界环境中绝对无法使用 . 难怪他们称之为TableVIEW,因为你几乎无法做任何不同的事情 .
我尝试实现一个简单的复制/粘贴功能,您可以将一次单元格的内容复制到另一个单元格 . 这是不容易的 . 但是,我以一种获取单元格属性并调用set方法的方式解决了它 .
摘抄:
if( observableValue instanceof DoubleProperty) {
try {
double value = numberFormatter.parse(clipboardCellContent).doubleValue();
((DoubleProperty) observableValue).set(value);
} catch (ParseException e) {
e.printStackTrace();
}
}
else if( observableValue instanceof IntegerProperty) {
try {
int value = NumberFormat.getInstance().parse(clipboardCellContent).intValue();
((IntegerProperty) observableValue).set(value);
} catch (ParseException e) {
e.printStackTrace();
}
}
else if( observableValue instanceof StringProperty) {
((StringProperty) observableValue).set(clipboardCellContent);
} else {
System.out.println("Unsupported observable value: " + observableValue);
}
您可以从this gist获取完整代码 . 它可能会让您了解如何解决此问题 .
关于POJO:您必须使用属性 . 关于其他类型,请使用正确的类型,DoubleProperty,ObjectProperty等 .
并且它是可观察的,一旦您更改数据,tableview将更新 .