编辑单元格javaFX后在tableview中恢复oldValue
您好,我正在跟踪Oracle站点的AddressBook示例编辑单元格javaFX后在tableview中恢复oldValue,java,javafx-2,tableview,Java,Javafx 2,Tableview,您好,我正在跟踪Oracle站点的AddressBook示例 bookName.setOnEditCommit( new EventHandler<TableColumn.CellEditEvent<Books, String>>() { @Override public void handle(TableColumn.CellEditEvent<Books, String> t) { if (t
bookName.setOnEditCommit(
new EventHandler<TableColumn.CellEditEvent<Books, String>>() {
@Override
public void handle(TableColumn.CellEditEvent<Books, String> t) {
if (t.getNewValue().equals("") || t.getNewValue().length() < 3) {
info.setText("Book name must be greater than 3 characters.");
// set the old value or do not update the cell.
return;
}
((Books) t.getTableView().getItems().get(
t.getTablePosition().getRow())).setBookName(t.getNewValue());
}
}
);
bookName.setOnEditCommit(
新的EventHandler(){
@凌驾
公共无效句柄(TableColumn.CellEditEvent t){
如果(t.getNewValue().equals(“”| | t.getNewValue().length()<3){
info.setText(“图书名称必须大于3个字符”);
//设置旧值或不更新单元格。
返回;
}
((Books)t.getTableView().getItems().get(
t、 getTablePosition().getRow()).setBookName(t.getNewValue());
}
}
);
问题是,如果我编辑一个单元格,它只接受新值,但如果字符串为空且少于3个字符,我不想更新单元格值。如果您没有找到解决方案,请尝试我的解决方案: 实际上,实际项保持不变,尽管表中显示了新值。因此,我要做的是删除该项并将其设置为旧项
qtyColumn.setOnEditCommit((TableColumn.CellEditEvent<TestObject, Integer> event) -> {
TestObject to = event.getTableView().getItems().get(event.getTablePosition().getRow());
try {
if (event.getNewValue() < 0) {
throw new Exception("You might wanna put error messages here");
} else {
to.setQty(event.getNewValue());
}
} catch (Exception e) {
//Make some dialog to show error
event.getTableView().getItems().set(event.getTablePosition().getRow(), to);
}
qtyColumn.setOnEditCommit((TableColumn.CellEditEvent事件)->{
TestObject to=event.getTableView().getItems().get(event.getTablePosition().getRow());
试一试{
if(event.getNewValue()<0){
抛出新异常(“您可能想在此处放置错误消息”);
}否则{
to.setQty(event.getNewValue());
}
}捕获(例外e){
//创建一些对话框以显示错误
event.getTableView().getItems().set(event.getTablePosition().getRow(),to);
}
就我而言,它是有效的。如果你还没有找到解决方案,试试我的: 实际上,实际项目保持不变,尽管表中显示了新的值。所以我要做的是删除项目并将其设置为旧项目
qtyColumn.setOnEditCommit((TableColumn.CellEditEvent<TestObject, Integer> event) -> {
TestObject to = event.getTableView().getItems().get(event.getTablePosition().getRow());
try {
if (event.getNewValue() < 0) {
throw new Exception("You might wanna put error messages here");
} else {
to.setQty(event.getNewValue());
}
} catch (Exception e) {
//Make some dialog to show error
event.getTableView().getItems().set(event.getTablePosition().getRow(), to);
}
qtyColumn.setOnEditCommit((TableColumn.CellEditEvent事件)->{
TestObject to=event.getTableView().getItems().get(event.getTablePosition().getRow());
试一试{
if(event.getNewValue()<0){
抛出新异常(“您可能想在此处放置错误消息”);
}否则{
to.setQty(event.getNewValue());
}
}捕获(例外e){
//创建一些对话框以显示错误
event.getTableView().getItems().set(event.getTablePosition().getRow(),to);
}
就我而言,它是有效的。如果你还没有找到解决方案,试试我的: 实际上,实际项目保持不变,尽管表中显示了新的值。所以我要做的是删除项目并将其设置为旧项目
qtyColumn.setOnEditCommit((TableColumn.CellEditEvent<TestObject, Integer> event) -> {
TestObject to = event.getTableView().getItems().get(event.getTablePosition().getRow());
try {
if (event.getNewValue() < 0) {
throw new Exception("You might wanna put error messages here");
} else {
to.setQty(event.getNewValue());
}
} catch (Exception e) {
//Make some dialog to show error
event.getTableView().getItems().set(event.getTablePosition().getRow(), to);
}
qtyColumn.setOnEditCommit((TableColumn.CellEditEvent事件)->{
TestObject to=event.getTableView().getItems().get(event.getTablePosition().getRow());
试一试{
if(event.getNewValue()<0){
抛出新异常(“您可能想在此处放置错误消息”);
}否则{
to.setQty(event.getNewValue());
}
}捕获(例外e){
//创建一些对话框以显示错误
event.getTableView().getItems().set(event.getTablePosition().getRow(),to);
}
就我而言,它是有效的。如果你还没有找到解决方案,试试我的: 实际上,实际项目保持不变,尽管表中显示了新的值。所以我要做的是删除项目并将其设置为旧项目
qtyColumn.setOnEditCommit((TableColumn.CellEditEvent<TestObject, Integer> event) -> {
TestObject to = event.getTableView().getItems().get(event.getTablePosition().getRow());
try {
if (event.getNewValue() < 0) {
throw new Exception("You might wanna put error messages here");
} else {
to.setQty(event.getNewValue());
}
} catch (Exception e) {
//Make some dialog to show error
event.getTableView().getItems().set(event.getTablePosition().getRow(), to);
}
qtyColumn.setOnEditCommit((TableColumn.CellEditEvent事件)->{
TestObject to=event.getTableView().getItems().get(event.getTablePosition().getRow());
试一试{
if(event.getNewValue()<0){
抛出新异常(“您可能想在此处放置错误消息”);
}否则{
to.setQty(event.getNewValue());
}
}捕获(例外e){
//创建一些对话框以显示错误
event.getTableView().getItems().set(event.getTablePosition().getRow(),to);
}
在我的例子中,它是有效的。当备份数据模型未更新但tableview显示新的编辑值时,这意味着tableview不会刷新渲染值。要强制刷新,请执行以下操作:
bookName.setOnEditCommit(
new EventHandler<TableColumn.CellEditEvent<Books, String>>() {
@Override
public void handle(TableColumn.CellEditEvent<Books, String> t) {
if (t.getNewValue().equals("") || t.getNewValue().length() < 3) {
info.setText("Book name must be greater than 3 characters.");
// workaround for refreshing rendered values
t.getTableView().getColumns().get(0).setVisible(false);
t.getTableView().getColumns().get(0).setVisible(true);
// set the old value or do not update the cell.
return;
}
((Books) t.getTableView().getItems().get(
t.getTablePosition().getRow())).setBookName(t.getNewValue());
}
}
);
bookName.setOnEditCommit(
新的EventHandler(){
@凌驾
公共无效句柄(TableColumn.CellEditEvent t){
如果(t.getNewValue().equals(“”| | t.getNewValue().length()<3){
info.setText(“图书名称必须大于3个字符”);
//刷新渲染值的变通方法
t、 getTableView().getColumns().get(0).setVisible(false);
t、 getTableView().getColumns().get(0).setVisible(true);
//设置旧值或不更新单元格。
返回;
}
((Books)t.getTableView().getItems().get(
t、 getTablePosition().getRow()).setBookName(t.getNewValue());
}
}
);
如果未更新备份数据模型,但tableview显示新的编辑值,则表示tableview未刷新渲染值。要强制刷新,请执行以下操作:
bookName.setOnEditCommit(
new EventHandler<TableColumn.CellEditEvent<Books, String>>() {
@Override
public void handle(TableColumn.CellEditEvent<Books, String> t) {
if (t.getNewValue().equals("") || t.getNewValue().length() < 3) {
info.setText("Book name must be greater than 3 characters.");
// workaround for refreshing rendered values
t.getTableView().getColumns().get(0).setVisible(false);
t.getTableView().getColumns().get(0).setVisible(true);
// set the old value or do not update the cell.
return;
}
((Books) t.getTableView().getItems().get(
t.getTablePosition().getRow())).setBookName(t.getNewValue());
}
}
);
bookName.setOnEditCommit(
新的EventHandler(){
@凌驾
公共无效句柄(TableColumn.CellEditEvent t){
如果(t.getNewValue().equals(“”| | t.getNewValue().length()<3){
info.setText(“图书名称必须大于3个字符”);
//刷新渲染值的变通方法
t、 getTableView().getColumns().get(0).setVisible(false);
t、 getTableView().getColumns().get(0).setVisible(true);
//设置旧值或不更新单元格。
返回;
}
((Books)t.getTableView().getItems().get(
t、 getTablePosition().getRow()).setBookName(t.getNewValue());
}
}
);
当备份数据模型未更新,但tableview显示新的编辑值时,表示tableview未刷新渲染值。要强制刷新