2016-05-31 11 views
0

のテーブル列で(一覧 データを関連付けることができます。 は、どのように私は、いくつかの属性を持つ私は、テーブルに表示する結果(データ)と呼ばれるクラスを持つテーブルビュー

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

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

PropertyValueFactory式を "評価しない" でください。テーブル項目のプロパティにアクセスしようとします。 TableCellのデフォルト値はtoStringメソッドを使用してテキストを表示するので、Ljava.lang.String;@bda3303のようなものが3番目のバージョンに表示されます。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])); 
関連する問題