2016-04-07 36 views
0

以前はテーブルビューを使用していませんでした。私はJavaとJavaFXでかなり新しいです。私は例をミラーリングしようとしましたが、データが家で作成されたdbクライアントから来ているので、それを正確にコピーできませんでした。とにかく、私のデータはテーブルに入っていますが、csvデータのように見えるようになり、各列はそれぞれの列に入れられません。ここJavaFX Tableviewにデータを書き込む

for (Column col : drs.getColumns()){ 
     TableColumn tblCol = new TableColumn(col.getName()); 
     tblCol.setCellValueFactory(new Callback<CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){ 
      public ObservableValue<String> call(CellDataFeatures<ObservableList, String> p) { 
       return new SimpleStringProperty(p.getValue().toString()); 
      } 
     }); 
     table.getColumns().addAll(tblCol); 
    } 

enter image description here

取得列、ここで行を取得する:ここに私の質問を明確にするスクリーンショットである

while (drs.hasNextRow()) { 
    ObservableList<String> row = FXCollections.observableArrayList(); 
    for (int i = 0; i < drs.getColumns().length; i++) { 
     row.add(drs.getNextRow().getItem(i) + ""); 
    } 
    data.add(row); 
} 

は、そして、ここでデータを送信する時に、私は失敗するところでありますテーブルに。そうのような

table.setItems(data); 
System.out.println("dis is data: " +data); 

データプリント:

dis is data: [[data, data, data....], [data, data, data....], [data, data, data....]] 

はそれぞれ[行]を取得し、各レコードの各カラムにそれを置きます。私は私が見えるようにデータを必要とすると仮定しています:

[[data], [data], [data]....[data]], [[data], [data], [data]....[data]], [[data], [data], [data]....[data]] 
} catch(Exception e){ 
     e.printStackTrace(); 
     System.out.println("everything is broken"); 
    } 
} 

だから、私は失われています。私は何をしているのか分からず、私があなたに提供できる助けに感謝します。

答えて

1

TableViewには、行内のすべてのデータが項目に関連付けられています。 TableColumn.cellValueFactoryは、列に表示する必要がある項目の「一部」を選択するために使用されます。したがって、あなたは値を選択するためにそれを使用する必要があります。ここでは

TableView<ObservableList<String>> table = ... 
int index = 0; 
for (Column col : drs.getColumns()) { 
    final int columnIndex = index++; 
    TableColumn<ObservableList<String>, String> tblCol = new TableColumn(col.getName()); 
    tblCol.setCellValueFactory(new Callback<CellDataFeatures<ObservableList<String>, String>, ObservableValue<String>>(){ 
     public ObservableValue<String> call(CellDataFeatures<ObservableList, String> p) { 
      return Bindings.stringValueAt(p.getValue(), columnIndex); 
     } 
    }); 
    table.getColumns().add(tblCol); 
} 

Bindings.stringValueAtObservableListフォーム要素を選択するために使用されます。

while (drs.hasNextRow()) { 
    ObservableList<String> row = FXCollections.observableArrayList(); 
    Row sourceRow = drs.getNextRow(); 
    for (int i = 0; i < drs.getColumns().length; i++) { 
     row.add(Objects.toString(sourceRow.getItem(i))); 
    } 
    data.add(row); 
} 
+0

はそんなにありがとう:

また、あなたは、行ごとに1つの行を使用する必要があります!私はそれが今は別のクエリを入力するときにそれはテーブルの古いものの右側に新しいクエリを追加する作業があります。 – anshanno

+1

@anshanno:あなたの入力データ構造はわかりませんが、疑わしいときは新しいデータを設定する前に 'TableView'の項目とカラムをクリアすることができます... – fabian

+0

これは魅力的です。 – anshanno