【问题标题】:JavaFX TableView: format one cell based on the value of another in the rowJavaFX TableView:根据行中另一个单元格的值格式化一个单元格
【发布时间】:2015-02-01 14:03:15
【问题描述】:

我有一个名为 TransactionWrapper 的类,用于为我的应用程序中的 TableView 填充我的 ObservableList。这个包装器有一个属性(枚举),指示它是取款还是存款。我需要去渲染/格式化金额单元格(根据交易的性质将其显示为红色或绿色),但我没有找到任何可以帮助我应对这场战斗的东西。

基本上我想要做的是查看该行并说如果类型是提款,则将文本涂成红色,如果是存款,则将其涂成绿色......我希望这里有人可以帮助我解决这个问题。我将在下面发布我在其他地方发现的 setCellFactory 尝试。这种方法允许我格式化单元格及其显示方式,但问题出在 updateItem 函数内部,我可以得到我的事务类型的值。

amountCol.setCellFactory(new Callback<TableColumn<TransactionWrapper, String>, TableCell<TransactionWrapper, String>>()
{
    @Override
    public TableCell<TransactionWrapper, String> call(
            TableColumn<TransactionWrapper, String> param)
    {
        return new TableCell<TransactionWrapper, String>()
        {
            @Override
            protected void updateItem(String item, boolean empty)
            {
                if (!empty)
                {
                    // should be something like (transaction.getType().equals(TransactionTypes.DEPOSIT) ? true : false;)
                    boolean isDeposit = true;
                    setText(item);                          
                    if(isDeposit) // should be if type is deposit
                    {
                        setTextFill(Color.GREEN);
                    }
                    else                            
                    {
                        setTextFill(Color.RED);
                    }
                }
            }
        };
    }
});

这是我设置专栏的方式:

amountCol.setCellValueFactory(cellData -> cellData.getValue().getAmountString());

这是运行一个名为 TransactionWrapper 的对象,其 fol:

private final StringProperty transactionTypeString;
private final StringProperty dateString;
private final StringProperty amountString;
private final StringProperty payeeString;
private final StringProperty categoryString;
private final StringProperty notesString;
private Transaction transaction;

对此的任何想法将不胜感激。 :D

谢谢, 乔恩

【问题讨论】:

  • 试试getTableRow().getItem().getDeposit()

标签: javafx format tableview tablerow tablecell


【解决方案1】:

想通了!感谢詹姆斯的想法,但我采取了一些不同的方式。这是以后阅读这篇文章的任何人的代码:

amountCol.setCellFactory(new Callback<TableColumn<TransactionWrapper, String>, 
            TableCell<TransactionWrapper, String>>()
            {
                @Override
                public TableCell<TransactionWrapper, String> call(
                        TableColumn<TransactionWrapper, String> param)
                {
                    return new TableCell<TransactionWrapper, String>()
                    {
                        @Override
                        protected void updateItem(String item, boolean empty)
                        {
                            if (!empty)
                            {
                                int currentIndex = indexProperty()
                                        .getValue() < 0 ? 0
                                        : indexProperty().getValue();
                                TransactionTypes type = param
                                        .getTableView().getItems()
                                        .get(currentIndex).getTransaction()
                                        .getTransactionType();
                                if (type.equals(TransactionTypes.DEPOSIT))
                                {
                                    setTextFill(Color.GREEN);
                                    setText("+ " + item);
                                } else
                                {
                                    setTextFill(Color.RED);
                                    setText("- " + item);
                                }
                            }
                        }
                    };
                }
            });

param.getTableView().getItems().get(currentIndex) 是关键.. 必须在那里钻取到父级,但它完成了工作。最大的挑战是找到索引。当我发现 indexProperty() 函数存在时感觉有点傻……哈哈。没有考虑查看可用的类级别功能。编码愉快!

【讨论】:

  • 不错的一个!你知道如何在单元格被选中时设置样式吗,文本填充颜色在选中时看起来不太好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
相关资源
最近更新 更多