我想通过javafx应用程序显示十几个参数。我只是选择TableView来渲染这些参数。
以下是这些参数的样子:
public abstract class AbstractParameter<T> {
private String myKey;
private ObjectProperty<T> myValue = new SimpleObjectProperty<T>()
private boolean constantValue;
public AbstractParameter<T>(){
//...
}
ObjectProperty<T> property(){
return property;
}
}
请注意,这里有多个子类,如StringParameter,IntegerParameter,LongParameter,BooleanParameter等等......
我使用这种方法是因为某些参数在运行期间定义/更新
现在这是我的ParametersUIController
public Class ParametersUiController {
@FXML
private TableView<AbstractParameter<?>> paramsTable;
@FXML
private TableColumn<AbstractParameter<?>, String> paramKeyCol;
@FXML
private TableColumn<AbstractParameter<?>, String> paramValueCol;
@FXML
private TableColumn<AbstractParameter<?>, Boolean> paramConstantValueCol;
private ObservableList<AbstractParameter<?>> paramsData = FXCollections.observableArrayList();
/**
* Just add some sample data in the constructor.
*/
public PersonTableController() {
/* getting a list of params for a service
the params are defined in list
*/
for(AbstractParameter<?> param : rawData)
paramsData.add(param);
}
/* I cast the value type to string always */
pValueCol.setCellValueFactory(new Callback<CellDataFeatures<AbstractParameter<?>, String>, ObservableValue<String>>() {
public ObservableValue<String> call(CellDataFeatures<AbstractParameter<?>, String> param) {
return new SimpleStringProperty(param.getValue().property().get().toString());
}
});
}
我担心有没有其他正确的方法来显示泛型类型T,而不是每次都在运行时使用String强制定义参数?
答案 0 :(得分:1)
您可以使用:
pValueCol.setCellValueFactory(new PropertyValueFactory("generic"));
并在模型中创建这样的方法:
ObjectProperty<T> genericProperty(){
return property;
}
语句new PropertyValueFactory("generic")
在模型中查找名为genericProperty
的方法。它可以返回包含在ObjectProperty<T>
。