当前位置: 首页 > 知识库问答 >
问题:

javafx表格单元格onEditCommit事件未激发?

羊舌赞
2023-03-14

我有一个TableView,它几乎没有可编辑的列。在JavaFX Scene Builder for editable table列的on Edit Commit中,我映射了一个FXML控制器方法,它调用DAO服务从数据库返回数据。问题是编辑表格单元格后,未调用事件处理程序方法。我希望在编辑单元格数据后按Tab键时触发此事件。怎么做?请建议

共有3个答案

鲜于宏义
2023-03-14

在这方面浪费了一天的大部分时间,在互联网上搜寻那些几乎说了同样的话,并且都在做我已经在做的事情的例子,这就是我发现的:

编辑TextFieldTableCell单元格中的值时,必须按enter键才能进行编辑提交。如果您在单元格外单击tab键,则单元格仍处于编辑模式(您可以继续按tab键以返回单元格的文本字段,如果您只需从单元格外单击,则会调用TextFieldTableCell的cancelEdit方法,从而取消编辑:-(

熊哲圣
2023-03-14

这是我用来从桌面视图的可编辑单元格中调用我的DAO的东西。

private TableColumn<Person, String> createNameCol(){
    TableColumn col = new TableColumn("Name");
    col.setCellValueFactory(
            new PropertyValueFactory<Person, String>("name"));
    col.setCellFactory(TextFieldTableCell.forTableColumn());
    col.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<Person, String>>() {
        @Override
        public void handle(TableColumn.CellEditEvent<Person, String> t) {

            Person p = t.getRowValue();
            p.setName(t.getNewValue());
            sl.update(p); //  This is where I call the update method from my DAO.
        }
    });

    return col;
}

如果这不起作用,请发布您的代码。

编辑:

下面是一个关于可编辑表格视图的好教程

赵晟睿
2023-03-14

我对CheckBoxTableCell和DatePickerTableCell和ColorPickerTableCells有同样的问题:-(

我是这样处理的:在控件的事件上,我取回了“((输入)getTableView(). getItems(). get(getTableRow(). getIndex()”使用的POJO对象,我更新了类似的内容,就像它是在OnEditCommit方法中完成的一样...

所以对我来说是这样的(更新颜色):

 ((Inputs) getTableView().getItems().get(
                    getTableRow().getIndex())
                    ).setColor(cp.getValue());

下面是ColorPickerCell的示例:

public class ColorPickerTableCell<Inputs> extends TableCell<Inputs, Color>{
private ColorPicker cp;

public ColorPickerTableCell(){        
    cp = new ColorPicker(); 
    cp.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            commitEdit(cp.getValue());
            updateItem(cp.getValue(), isEmpty());
            ((Inputs) getTableView().getItems().get(
                    getTableRow().getIndex())
                    ).setColor(cp.getValue());
        }            
    });                
    setGraphic(cp);
    setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
    setEditable(true);        
}     
@Override
protected void updateItem(Color item, boolean empty) {
    super.updateItem(item, empty);
    cp.setVisible(!empty);
    this.setItem(item);
    cp.setValue(item);
}
}

使用这个简单的JavaFX的POJO:

    public ObjectProperty<Color> color = new SimpleObjectProperty<Color>();

    this.color = new SimpleObjectProperty(color);

    public ObjectProperty<Color> colorProperty() {
    return color;
 }

public void setColor(Color color2) {
    color.set(color2);
}

我不知道这是否是一个很好的方法,但它为我工作。。。请注意,JavaFX的POJO只能在“ActionEvent”请求(combobox、datepicker、colorpicker等)中访问

当做

 类似资料:
  • 问题内容: 我正在尝试用Java编写程序来管理我的Bookie帐户。我是java的新手,所以我认为我会选择一些简单的方法来了解事情的原理。我决定使用表格视图并使各个单元格可编辑。我一直在关注本教程http://java- buddy.blogspot.co.uk/2012/04/javafx-2-editable-tableview.html 。它详细说明了如何使用Java代码执行此操作,并将其复

  • 问题内容: 我想根据第1列中的值给表格单元格上色,如果值不等于第1列中的值,则颜色应为青色,但我的代码不起作用: 问题答案: 是否必须突出显示单元格的决定必须在TableCellRenderer中进行。它不能在JTable中进行。因此,(没有)没有理由要重写JTable中的方法。相反,您可以将列的CellRenderer设置为TableCellRenderer的自己实现。 在此示例中,列2和3接收

  • Option 事件 jQuery 事件 参数 描述 onAll all.bs.table name, args 所有的事件都会触发该事件,参数包括: name:事件名, args:事件的参数。 onClickRow click-row.bs.table row, $element 当用户点击某一行的时候触发,参数包括: row:点击行的数据, $element:tr 元素, field:点击列的

  • 我有一个表视图,其中很少有列是可编辑的,也很少有不可编辑的。当我在第一列中输入一些值并按tab键时,将调用一个服务,返回的对象将映射到表行。我的要求是根据返回对象中的标志将不可编辑列设置为可编辑(仅在我编辑过的行中)。下面是调用服务并将返回的对象设置为行的代码。 请建议如何在运行时根据标志将不可编辑的列转换为可编辑的列。

  • 问题内容: 我试图让表单元格在创建新行时显示字符串。但是所有行都是空的。有人知道我在做什么错吗?这是主要的类:包应用程序; 这是正常的并且可以正常工作,所以我认为您不必为此担心。 这是控制器类。我认为问题可能出在哪里。 这也是tableviewer所需的表类 你们知道什么地方可能出错,或者建议我如何只添加tableviewer,使其代码仍可与SceneBuilder中的其余fxml文件一起使用?

  • 我把网格窗格设置得很好。但如何在每个单元格中放置事件处理程序?就像鼠标双击和右键单击一样。谁能给我举个例子吗?非常感谢。