1

私は作成しようとしていて、TreeTableView販売値ファクトリーをに設定しようとしてい ます

    @FXML
    private TreeTableColumn<Good, Long> folderId;

ここ:

 folderId.setCellValueFactory((TreeTableColumn.CellDataFeatures<Good, Long> param) ->
                new ReadOnlyLongWrapper(param.getValue().getValue().getFolderId()));

タイトルに記載されているエラーで、この下線付きの赤が表示されます。クラスgetFolderId 内は次のとおりです。Good

public Long getFolderId() {
        return folderId;
    }

同じメソッドが文字列またはブール値に対して正常に機能しますが、タイトルに記載されている例外とコンパイル時に次の例外がドロップされます。

incompatible types: bad return type in lambda expression
    javafx.beans.property.ReadOnlyLongWrapper cannot be converted to javafx.beans.value.ObservableValue<java.lang.Long>

ObservableValue<java.lang.Long>代わりに取得する方法ReadOnlyLongWrapperと、この例外が Long 値でのみ表示される理由は?

ここにメソッド全体があります:

goodsPane.setCenter(goodTreeTableView);
        List<Good> goodAndFoldersList = goodsService.getGoods();
        List<Good> goods = new ArrayList<Good>();
        List<Good> roots = new ArrayList<Good>();
        for (Good good: goodAndFoldersList){
            if (good.isIs_folder()) {
                roots.add(good);
            }else {
                goods.add(good);
            }
        }
        TreeItem<Good> rootItem = new TreeItem<>();
        for (Good root: roots){
            Long folderId = root.getId();
            TreeItem<Good> rootTreeItem = new TreeItem<>(root);
            for (Good good: goods){
                if (good.getFolderId() == folderId){
                    TreeItem<Good> goodTreeItem = new TreeItem<>(good);
                    rootTreeItem.getChildren().add(goodTreeItem);
                }
            }
            rootItem.getChildren().add(rootTreeItem);
        }
        goodTreeTableView.setRoot(rootItem);
        goodName.setCellValueFactory((TreeTableColumn.CellDataFeatures<Good, String> param) ->
                new ReadOnlyStringWrapper(param.getValue().getValue().getName()));
        folderId.setCellValueFactory((TreeTableColumn.CellDataFeatures<Good, Long> param) ->
                new ReadOnlyLongWrapper(param.getValue().getValue().getFolderId()));
        is_folder.setCellValueFactory((TreeTableColumn.CellDataFeatures<Good, Boolean> param) ->
                new ReadOnlyBooleanWrapper(param.getValue().getValue().isIs_folder()));
4

1 に答える 1

3

ReadOnlyLongWrapperですObservableValue<Number>

したがって、手元には2つの解決策があります。

  1. 列をTreeTableColumn<Good, Number> folderId;またはに変更します
  2. の独自の実装を作成しますObservableValue<Long>

ほとんどの場合、できるように 1 で問題ありませんNumber.longValue()

于 2015-05-11T16:41:25.277 に答える