如何将数据(List <simplestringproperty>与表视图的表列关联)

时间:2016-05-31 14:44:27

标签: javafx

我有一个名为Result的类(我希望在我的表中显示的数据),它有几个属性。

public class Result
{
    private final SimpleStringProperty object;
    private List<SimpleStringProperty> listObject= new ArrayList<SimpleStringProperty>();
    private final Util util = new Util();

    public Result(String object, String[] listObject)
    {
    this.object= new SimpleStringProperty(object);
    this.objectList= util.transformar(listObject);
    }

    public String getObject()
    {
    return this.object.get();
    }
    public void setObject(String object)
    {
    this.hash.set(hash);
    }
    public String[] getListObject()
    {
    return util.transformar2(this.listObject);
    }

    public void setListObject(String[] listObject)
    {
    this.listObject= transformar(listObject);
    }
}

我有我的控制器,我有一个空表,我添加了列和objetcs结果。控制器具有以下属性:

@FXML
private TableView tablaResultado;

我这样做的方法是:

 private List<TableColumn> load()
    {
    List<TableColumn> listColumn = new ArrayList<TableColumn>();
    Object2 object2= new Object2();
    List<Result> listaResultado = object2.getResultado();
    ObservableList<Result> prueba = FXCollections
        .observableArrayList(listaResultado);
    TableColumn<Result, String> object= new TableColumn<Result, String>("object");
    direccion.setCellValueFactory(
        new PropertyValueFactory<Result, String>(
            "object"));
    listColumn.add(object);
    List<TableColumn<Result, String>> listObject = new ArrayList<TableColumn<Result, String>>();
    for (int i = 0; i < ((Result) listaResultado
        .get(0)).getListObject().length; i++)
    {
        TableColumn<Result, String> columna = new TableColumn<Result, String>(
            this.lenguaje.getProperty("listObject"+i);
        columna.setCellValueFactory(
            new PropertyValueFactory<Result, String>(
                "listObject[" + i + "]"));
        objectList.add(columna);
    }
    listColumn.addAll(objectList);
        ObservableList<TableColumn<Result, String>> prueba2 = FXCollections
            .observableArrayList(listObject);
        this.tablaResultado.setItems(prueba);
       this.tablaResultado.getColumns().addAll(object);
        for (int i = 0; i < prueba2.size(); i++)
        {
        this.tablaResultado.getColumns().addAll(prueba2.get(i));
        }
        }
    return listColumn ;

结果是列中包含名称和列对象中的数据,但列listObject中的数据为空。它必须是列表或其他东西,因为我不知道listObject的大小。

如果我改变:

columna.setCellValueFactory(new PropertyValueFactory<Result, String ("listObject[" + i + "]"));

我写道:

columna.setCellValueFactory(new PropertyValueFactory<Result, String ("listObject"));

我在那些列中得到了类似Ljava.lang.String; @ bda3303的内容。

2 个答案:

答案 0 :(得分:1)

待办事项

final int index = i ;
columna.setCellValueFactory(cellData -> 
    new SimpleStringProperty(cellData.getValue().getListObject()[index]));

答案 1 :(得分:0)

PropertyValueFactory没有&#34;评估&#34;一种表达。它只是尝试访问表项的属性。默认TableCell将使用toString方法来显示文本,这就是您在第三个版本中获得Ljava.lang.String;@bda3303之类的内容的原因,请参阅 Java arrays printing out weird numbers, and text

但是,您可以编写自己的cellValueFactory

public class Result
     public StringProperty listObjectProperty(int index) {
          return listObject.get(index);
     }
final int columnIndex = i;
columna.setCellValueFactory(cellData -> cellData.getValue().listObjectProperty(columnIndex));

或者,只需为列值创建一个具有常量值的ObservableValue<String>

final int columnIndex = i;
columna.setCellValueFactory(cellData -> Bindings.createStringBinding(() -> cellData.getValue().getListObject()[columnIndex]));