将TableView与通用对象属性一起使用

时间:2016-04-27 20:29:05

标签: java tableview javafx-8

我想通过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强制定义参数?

1 个答案:

答案 0 :(得分:1)

您可以使用:

pValueCol.setCellValueFactory(new PropertyValueFactory("generic"));

并在模型中创建这样的方法:

ObjectProperty<T> genericProperty(){ 
         return property;
}

语句new PropertyValueFactory("generic")在模型中查找名为genericProperty的方法。它可以返回包含在ObjectProperty<T>

中的通用值