我有一个名为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的内容。
答案 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]));