Jon*_*cie 3 format javafx tableview tablecell tablerow
我有一个名为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);
}
}
}
};
}
});
Run Code Online (Sandbox Code Playgroud)
以下是我如何设置我的专栏:
amountCol.setCellValueFactory(cellData -> cellData.getValue().getAmountString());
Run Code Online (Sandbox Code Playgroud)
这是一个名为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;
Run Code Online (Sandbox Code Playgroud)
对此有任何想法将非常感激.:d
谢谢,乔恩
弄清楚了!感谢James的想法,但我采取了一些不同的方式.这是以后阅读这篇文章的人的代码:
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);
}
}
}
};
}
});
Run Code Online (Sandbox Code Playgroud)
param.getTableView().getItems().get(currentIndex)是关键的..不得不在那里钻进一点,但它完成了工作.最大的挑战是寻找指数.当我发现indexProperty()函数存在时感觉有点傻..大声笑.没想到要查看可用的类级函数.快乐的编码!