拖放事件完成后,如何在javafx tablecell中设置单元格值?

Githiora

我正在设计一个允许在TableView单元格上拖放的应用程序

但是,一旦完成拖放操作并成功切换了单元格的值,则双击已执行拖放操作的单元格,使单元格变回其拖放之前的原始文本。

帮我解决这个问题。以下代码用于设置cellFactoryValue所有单元格。我是javafx的新手。

private void setCellFactoryForColumns(TableColumn<TimeTable, String> col)
{
    col.setCellFactory((TableColumn<TimeTable, String> e) -> {
        TableCell<TimeTable, String> cell = new TableCell<TimeTable, String>() {
            @Override
            public void updateItem(String item, boolean empty) {

                super.updateItem(item, empty);
                if (item == null || empty) {
                    setText(null);
                    setGraphic(null);
                } else {
                    setText(item);
                    setGraphic(null);
                }
            }
        };

        col.setOnEditCommit((CellEditEvent<TimeTable, String> t) -> {
            ((TimeTable)t.getTableView().getItems().get(
                    t.getTablePosition().getRow())
                    ).setDay(t.getNewValue());
        });

        cell.setOnDragDetected((MouseEvent event) -> {
            Dragboard db = cell.startDragAndDrop(TransferMode.ANY);

            ClipboardContent content = new ClipboardContent();
            content.putString(cell.getText());
            db.setContent(content);
            cell.setStyle("-fx-background-color: red;"
                        + "-fx-text-fill: white;");
            cell.startEdit();
            cell.setText("Dragged");

            event.consume();
        });

        cell.setOnDragOver((DragEvent event) ->{
            if(event.getGestureSource() != cell &&
                    event.getDragboard().hasString())
            {
                event.acceptTransferModes(TransferMode.MOVE);
                cell.setStyle("-fx-background-color: green;"
                        + "-fx-text-fill: white;");
            }
            event.consume();
        });

        cell.setOnDragEntered((DragEvent event) ->{
           if(event.getGestureSource() != cell &&
                   event.getDragboard().hasString()){
               cell.setStyle("-fx-background-color: yellow;");
           } 
           event.consume();
        });

        cell.setOnDragExited((DragEvent event) -> {
           cell.setStyle("-fx-background-color: grey;");
           event.consume();
        });

        cell.setOnDragDropped((DragEvent event) -> {
            Dragboard db = event.getDragboard();
            boolean success = false;
            if(db.hasString())
            {
                holdData = cell.getText();
                cell.setText(db.getString());
                success = true;
            }

            event.setDropCompleted(success);
            event.consume();
        });

        cell.setOnDragDone((DragEvent event) ->{
           if(event.getTransferMode() == TransferMode.MOVE)
           {
               cell.setText(holdData);
           }
           event.consume();
        });
        return cell;
    });
}
法比安

您只需更改单元格中的文本,而不更改项目的属性。因此,每次将新项目分配给时TableCell,旧值都将用作文本。

如果滚动包含项目的单元格不在视线范围内,也会发生这种情况。

要解决此问题,请更换

cell.setText(db.getString());

cell.setText(holdData);

onDragDone/onDragDropped处理程序中的语句

update(cell, db.getString());

update(cell, holdData);

分别实现如下update方法:

static void update(TableCell<TimeTable, String> cell, String newValue) {
    ((TableRow<TimeTable>)cell.getTableRow()).getItem().setDay(newValue);
    // the below line would be needed, if the setter does not trigger
    // a update of the ObservableValue returned by the cellValueFactory
    // cell.getTableView().refresh();
}

如果您cellValueFactory返回的aWritableProperty允许写入该项目,则该方法可以更一般地写为

static <I,P>void update(TableCell<I, P> cell, P newValue) {
    WritableValue<P> property = (WritableValue<P>) cell.getTableColumn().getCellObservableValue(((TableRow<I>)cell.getTableRow()).getItem());
    property.setValue(newValue);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何设置JTable中特定单元格的值?

来自分类Dev

如果其他单元格包含“某物”,如何在 2 个单元格中设置值

来自分类Dev

如何在iOS的TableView中为单个单元格中的多个按钮设置标签值

来自分类Dev

在Google Spreadsheets中,如何在用户单击并激活一个单元格后从另一个单元格的值中设置一个单元格的值?

来自分类Dev

如何在下一列的单元格中设置值?

来自分类Dev

计算完成后,如何让单元格继承新值?

来自分类Dev

JavaFX 根据单元格值设置单元格颜色

来自分类Dev

设置单元格数据后,如何更新UICollectionView中单元格的大小?

来自分类Dev

在phpexcel中合并后按行和列设置单元格值的问题

来自分类Dev

在phpexcel中合并后按行和列设置单元格值的问题

来自分类Dev

如何根据位置可变的其他单元格设置单元格值

来自分类Dev

Swift:如何在包含多个单元格的TableViewController中设置动态单元格高度

来自分类Dev

当C#中的datagridview单元格包含0值时,如何设置某些文本?

来自分类Dev

当单元格中的数据超过特定值时,如何连续设置背景色

来自分类Dev

如何基于单元格值在Excel VBA中设置条件?

来自分类Dev

如何根据单元格中的可变值设置datagrid行的背景

来自分类Dev

如何在R中的热图单元格中显示数字单元格值

来自分类Dev

如何在嵌套在单元格中的单元格中创建值

来自分类Dev

如何在R中的热图单元格中显示数字单元格值

来自分类Dev

如何根据绑定值设置DataGrid单元格内容?

来自分类Dev

如何根据列名和单元格值设置样式?

来自分类Dev

如何根据绑定值设置DataGrid单元格内容?

来自分类Dev

如何使用单词和单元格设置值

来自分类Dev

如何为非空单元格设置值

来自分类Dev

如何在iOS中设置tableView单元格标题?

来自分类Dev

如何使用jQuery在Django模板中基于另一个单元格的值在表格单元格中设置复选框状态

来自分类Dev

如何在GridView中获取单元格值(不使用单元格索引)

来自分类Dev

如何在同一单元格中对单元格值进行排名

来自分类Dev

Javafx如何从列表中获取单元格(不是值)

Related 相关文章

  1. 1

    如何设置JTable中特定单元格的值?

  2. 2

    如果其他单元格包含“某物”,如何在 2 个单元格中设置值

  3. 3

    如何在iOS的TableView中为单个单元格中的多个按钮设置标签值

  4. 4

    在Google Spreadsheets中,如何在用户单击并激活一个单元格后从另一个单元格的值中设置一个单元格的值?

  5. 5

    如何在下一列的单元格中设置值?

  6. 6

    计算完成后,如何让单元格继承新值?

  7. 7

    JavaFX 根据单元格值设置单元格颜色

  8. 8

    设置单元格数据后,如何更新UICollectionView中单元格的大小?

  9. 9

    在phpexcel中合并后按行和列设置单元格值的问题

  10. 10

    在phpexcel中合并后按行和列设置单元格值的问题

  11. 11

    如何根据位置可变的其他单元格设置单元格值

  12. 12

    Swift:如何在包含多个单元格的TableViewController中设置动态单元格高度

  13. 13

    当C#中的datagridview单元格包含0值时,如何设置某些文本?

  14. 14

    当单元格中的数据超过特定值时,如何连续设置背景色

  15. 15

    如何基于单元格值在Excel VBA中设置条件?

  16. 16

    如何根据单元格中的可变值设置datagrid行的背景

  17. 17

    如何在R中的热图单元格中显示数字单元格值

  18. 18

    如何在嵌套在单元格中的单元格中创建值

  19. 19

    如何在R中的热图单元格中显示数字单元格值

  20. 20

    如何根据绑定值设置DataGrid单元格内容?

  21. 21

    如何根据列名和单元格值设置样式?

  22. 22

    如何根据绑定值设置DataGrid单元格内容?

  23. 23

    如何使用单词和单元格设置值

  24. 24

    如何为非空单元格设置值

  25. 25

    如何在iOS中设置tableView单元格标题?

  26. 26

    如何使用jQuery在Django模板中基于另一个单元格的值在表格单元格中设置复选框状态

  27. 27

    如何在GridView中获取单元格值(不使用单元格索引)

  28. 28

    如何在同一单元格中对单元格值进行排名

  29. 29

    Javafx如何从列表中获取单元格(不是值)

热门标签

归档