3

API と例を読みましたが、テーブルビューを作成する方法を理解できません。

「名前、値」のペアを持つ 2 列の文字列配列 (文字列[][]) があるとします。元の配列のすべての行の最初の列に名前を表示し、2 番目の列に値を表示する 2 つの列にデータを表示するテーブルビューを作成したいだけです。

私は何を試しましたか?何もありませんが、列ごとに1つずつオブザーバブルリストを作成し、それをそれぞれの列にバインドしてから、列をテーブルビューに追加する必要があるようです。しかし、これには、私が見たすべての例に「工場」が含まれており、これは私にとって異質な概念です。

これは簡単だと思いますが、頭を包むことができません。助けてください。

4

3 に答える 3

2

ええ、それは簡単でした。行クラスを作成します。

Row(String fName, String fValue){
    this.fieldName = new SimpleStringProperty(fName);
    this.fieldValue = new SimpleStringProperty(fValue);
}

String-array の各行に対して、observableList に追加する行オブジェクトを作成します。

private ObservableList<Row> observableList = FXCollections.observableArrayList(          
              new Row("The Unfun Cat", "Is a terrible programmer"), 
              new Row("Stack Overflow", "Rules!");

次に、配列内の両方の列に対して tablecolumn を作成します。

TableColumn columnName = new TableColumn("Name");
columnName.setCellValueFactory(
        new PropertyValueFactory<Row,String>("fieldName"));

(値と同じ)

次に、tableView.setItems(observableList) を使用して observableList を tableView に追加し、最後にメソッド tableView.getColumns.addAll(fieldName,fieldValue); を呼び出します。

(これは、元の String[][] 配列にいくつの列があるかわからない一般的なケースでどうすればよいのだろうかと思いますか?行オブジェクトは、任意の数の SimpleStringProperties を表す ArrayList を持つことができますか?どのように接続しますか?それを ValueFactory に?)

Ps。誰かがより教育的な例を作成した場合、私は彼らの投稿に「解決済み」のマークを付けます。

于 2012-08-31T18:01:11.090 に答える
1

テーブルに追加する列の数を知らなくても、マップでこれを試すこともできます! マップキーをテーブルビューヘッダーとして使用できます

TableView<Map<String, String>> tableView = new TableView<>();

ArrayList<Map<String, String>> valuesArray = new ArrayList<>();
for(Object object : filter.getEntities()) {
  Map<String, String> values = getValuesAsStringsForObject(object);
  valuesArray.add(values);
}

for(Object o : filter.getEntities()){
  List<String> headers = getHeaders(o);
  for (String header :headers){
    TableColumn<Map<String, String>, String> tableColumn = new TableColumn<>(header);
    tableColumn.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().get(header)));

    tableView.getColumns().add(tableColumn);
  }
  break;
}

tableView.getItems().addAll(valuesArray);
return tableView;
于 2016-10-05T08:37:40.710 に答える