JavaFX的MapValueFactory类学习

104 篇文章 5 订阅

MapValueFactory类类似PropertyValueFactory类,作用于TableColumn类,绑定数据。以下是MayValueFactory的是实现代码。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package javafx.scene.control.cell;

import java.util.Map;
import javafx.beans.NamedArg;
import javafx.beans.property.ReadOnlyBooleanWrapper;
import javafx.beans.property.ReadOnlyDoubleWrapper;
import javafx.beans.property.ReadOnlyFloatWrapper;
import javafx.beans.property.ReadOnlyIntegerWrapper;
import javafx.beans.property.ReadOnlyLongWrapper;
import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.TableColumn;
import javafx.util.Callback;

public class MapValueFactory<T> implements Callback<TableColumn.CellDataFeatures<Map, T>, ObservableValue<T>> {
    private final Object key;

    public MapValueFactory(@NamedArg("key") Object var1) {
        this.key = var1;
    }

    public ObservableValue<T> call(TableColumn.CellDataFeatures<Map, T> var1) {
        Map var2 = (Map)var1.getValue();
        Object var3 = var2.get(this.key);
        if (var3 instanceof ObservableValue) {
            return (ObservableValue)var3;
        } else if (var3 instanceof Boolean) {
            return new ReadOnlyBooleanWrapper((Boolean)var3);
        } else if (var3 instanceof Integer) {
            return new ReadOnlyIntegerWrapper((Integer)var3);
        } else if (var3 instanceof Float) {
            return new ReadOnlyFloatWrapper((Float)var3);
        } else if (var3 instanceof Long) {
            return new ReadOnlyLongWrapper((Long)var3);
        } else if (var3 instanceof Double) {
            return new ReadOnlyDoubleWrapper((Double)var3);
        } else {
            return (ObservableValue)(var3 instanceof String ? new ReadOnlyStringWrapper((String)var3) : new ReadOnlyObjectWrapper(var3));
        }
    }
}

《Learn JavaFX 8 Building User Experience and Interface with Java 8》中chapter13章示例,在此,自定义继承Callback<CellDataFeatures<Map, T>, ObservableValue<T>>接口的PersonDataInMapFactory类。实现如下:

package learn.javafx8.ch13.maptableview01;

import java.time.LocalDate;
import java.util.Map;

import javafx.beans.property.ReadOnlyIntegerWrapper;
import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.TableColumn.CellDataFeatures;
import javafx.util.Callback;

/**
 * @copyright 2023-2022
 * @package   learn.javafx8.ch13.maptableview01
 * @file      PersonDataInMapFactory.java
 * @date      2023-07-27 10:59
 * @author    qiao wei
 * @version   1.0
 * @brief     继承Callback<CellDataFeatures<Map, T>, ObservableValue<T>>接口。手动实现MapValueFactory功能。
 * @history
 */
public class PersonDataInMapFactory<T>
    implements Callback<CellDataFeatures<Map, T>, ObservableValue<T>> {
    
    /**
     * @class   PersonDataInMapFactory
     * @date    2023-07-27 23:32
     * @author  qiao wei
     * @version 1.0
     * @brief   Constructor.
     * @param   key Map实例中的对应key值。
     * @return  
     * @throws
     */
    public PersonDataInMapFactory(Object key) {
        this.key = key;
    }
    
    @Override
    public ObservableValue<T> call(CellDataFeatures<Map, T> dataFeatures) {
        Object value = ((Map) dataFeatures.getValue()).get(this.key);
        
        if (value instanceof ObservableValue) {
            return (ObservableValue) value;
        } else if (value instanceof Integer) {
            return (ObservableValue<T>) new ReadOnlyIntegerWrapper((Integer)value);
        } else if (value instanceof String) {
            return (ObservableValue<T>) new ReadOnlyStringWrapper((String) value);
        } else if (value instanceof LocalDate) {
            LocalDate localDate = (LocalDate) value;
            return (ObservableValue<T>) new ReadOnlyObjectWrapper(localDate);
        }

        return null;
    }

    private final Object key;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值