You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaFX TableView展示前将byte[]转为自定义十六进制字符串?

解决JavaFX TableView中byte[]转十六进制字符串的展示问题

方案一:在Transaction类中添加转换后的只读属性

这种方式适合需要在多处复用转换后值的场景,直接在实体类中封装转换逻辑:

修改Transaction类,新增返回十六进制字符串的get方法:

public class Transaction implements Serializable
{
    private transient byte[] txId;
    private byte[] sender;
    private byte[] receiver;
    private double amount;

    // 获取txId的十六进制字符串
    public String getTxIdHex() {
        return txId != null ? YourUtilClass.digestToHex(txId) : "";
    }

    // 获取sender的十六进制字符串
    public String getSenderHex() {
        return sender != null ? YourUtilClass.digestToHex(sender) : "";
    }

    // 获取receiver的十六进制字符串
    public String getReceiverHex() {
        return receiver != null ? YourUtilClass.digestToHex(receiver) : "";
    }

    // 保留原有getter方法(按需添加)
    public byte[] getTxId() { return txId; }
    public byte[] getSender() { return sender; }
    public byte[] getReceiver() { return receiver; }
    public double getAmount() { return amount; }
}

然后更新TableView的列配置,使用新的属性名:

@FXML
void refreshButtonPressed(ActionEvent event) {
    List<Transaction> incomingList = 
    DependencyManager.getAccountStorage().getAccount(publicKey).getIncomingTransactions();
    incomingTransactions = FXCollections.observableList(incomingList);
    
    idCol.setCellValueFactory(new PropertyValueFactory<Transaction, String>("txIdHex"));
    senderCol.setCellValueFactory(new PropertyValueFactory<Transaction, String>("senderHex"));
    receiverCol.setCellValueFactory(new PropertyValueFactory<Transaction, String>("receiverHex"));
    // 注意amount类型应为Double,而非String,PropertyValueFactory会自动处理展示
    amountCol.setCellValueFactory(new PropertyValueFactory<Transaction, Double>("amount"));
    
    incomingView.setItems(incomingTransactions);
}

方案二:自定义TableCell实现转换(无需修改实体类)

如果不想改动Transaction类,可直接在TableView的列中自定义单元格渲染逻辑,适合临时或单一展示场景:

@FXML
void refreshButtonPressed(ActionEvent event) {
    List<Transaction> incomingList = 
    DependencyManager.getAccountStorage().getAccount(publicKey).getIncomingTransactions();
    incomingTransactions = FXCollections.observableList(incomingList);
    
    // 配置txId列:先绑定byte[]属性,再自定义单元格转换为十六进制
    idCol.setCellValueFactory(new PropertyValueFactory<Transaction, byte[]>("txId"));
    idCol.setCellFactory(column -> new TableCell<Transaction, byte[]>() {
        @Override
        protected void updateItem(byte[] item, boolean empty) {
            super.updateItem(item, empty);
            setText(empty || item == null ? "" : YourUtilClass.digestToHex(item));
        }
    });
    
    // sender列同理
    senderCol.setCellValueFactory(new PropertyValueFactory<Transaction, byte[]>("sender"));
    senderCol.setCellFactory(column -> new TableCell<Transaction, byte[]>() {
        @Override
        protected void updateItem(byte[] item, boolean empty) {
            super.updateItem(item, empty);
            setText(empty || item == null ? "" : YourUtilClass.digestToHex(item));
        }
    });
    
    // receiver列同理
    receiverCol.setCellValueFactory(new PropertyValueFactory<Transaction, byte[]>("receiver"));
    receiverCol.setCellFactory(column -> new TableCell<Transaction, byte[]>() {
        @Override
        protected void updateItem(byte[] item, boolean empty) {
            super.updateItem(item, empty);
            setText(empty || item == null ? "" : YourUtilClass.digestToHex(item));
        }
    });
    
    amountCol.setCellValueFactory(new PropertyValueFactory<Transaction, Double>("amount"));
    
    incomingView.setItems(incomingTransactions);
}

注:YourUtilClass需替换为你实际存放digestToHex方法的工具类名称。

内容的提问来源于stack exchange,提问作者Thriest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:25:16