@SuppressWarnings("unchecked") private void initializeTreeTableView() { treeTableView.setShowRoot(false); // don't show the root treeTableView.setEditable(true); // required for editable columns treeTableView.setTableMenuButtonVisible(true); // force resize policy for better default appearance treeTableView.setColumnResizePolicy(TreeTableView.CONSTRAINED_RESIZE_POLICY); final TreeTableColumn<Account, String> nameColumn = new TreeTableColumn<>(resources.getString("Column.Account")); nameColumn.setCellValueFactory( param -> new ReadOnlyStringWrapper(param.getValue().getValue().getName())); final TreeTableColumn<Account, Integer> entriesColumn = new TreeTableColumn<>(resources.getString("Column.Entries")); entriesColumn.setCellValueFactory( param -> new SimpleIntegerProperty(param.getValue().getValue().getTransactionCount()) .asObject()); final TreeTableColumn<Account, BigDecimal> balanceColumn = new TreeTableColumn<>(resources.getString("Column.Balance")); balanceColumn.setCellValueFactory( param -> new ReadOnlyObjectWrapper<>( AccountBalanceDisplayManager.convertToSelectedBalanceMode( param.getValue().getValue().getAccountType(), param.getValue().getValue().getTreeBalance()))); balanceColumn.setCellFactory(cell -> new AccountCommodityFormatTreeTableCell()); final TreeTableColumn<Account, BigDecimal> reconciledBalanceColumn = new TreeTableColumn<>(resources.getString("Column.ReconciledBalance")); reconciledBalanceColumn.setCellValueFactory( param -> new ReadOnlyObjectWrapper<>( AccountBalanceDisplayManager.convertToSelectedBalanceMode( param.getValue().getValue().getAccountType(), param.getValue().getValue().getReconciledTreeBalance()))); reconciledBalanceColumn.setCellFactory(cell -> new AccountCommodityFormatTreeTableCell()); final TreeTableColumn<Account, String> currencyColumn = new TreeTableColumn<>(resources.getString("Column.Currency")); currencyColumn.setCellValueFactory( param -> new ReadOnlyStringWrapper(param.getValue().getValue().getCurrencyNode().getSymbol())); final TreeTableColumn<Account, String> typeColumn = new TreeTableColumn<>(resources.getString("Column.Type")); typeColumn.setCellValueFactory( param -> new ReadOnlyStringWrapper(param.getValue().getValue().getAccountType().toString())); final TreeTableColumn<Account, Integer> codeColumn = new TreeTableColumn<>(resources.getString("Column.Code")); codeColumn.setEditable(true); codeColumn.setCellValueFactory( param -> new SimpleIntegerProperty(param.getValue().getValue().getAccountCode()).asObject()); codeColumn.setCellFactory(param -> new IntegerEditingTreeTableCell()); codeColumn.setOnEditCommit( event -> updateAccountCode(event.getRowValue().getValue(), event.getNewValue())); treeTableView .getColumns() .addAll( nameColumn, codeColumn, entriesColumn, balanceColumn, reconciledBalanceColumn, currencyColumn, typeColumn); restoreColumnVisibility(); installListeners(); }