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;
}