gpt4 book ai didi

JavaFX 表格 View : format one cell based on the value of another in the row

转载 作者:行者123 更新时间:2023-12-02 05:40:50 24 4
gpt4 key购买 nike

我有一个名为 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 的对象,其运行如下:

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

谢谢,乔恩

最佳答案

想通了!感谢詹姆斯的想法,但我采取了不同的方式。以下是供将来阅读本文的任何人使用的代码:

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() 函数存在时,感觉有点傻。哈哈。没有想到查看可用的类级别函数。快乐编码!

关于JavaFX 表格 View : format one cell based on the value of another in the row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27281370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com