JavaFXTableViewの列に2つの別々のデータセットを挿入したいと思います。基本的に、文字列を含む2つのLinkedListがあり、1つのリストを1つの列に配置し、別のリストを2番目の列に配置したいと思います。
これを行う最も簡単な方法は何ですか?または、別のJavaFX要素がこれに適していますか?
これまでに見つけた解決策は、行に挿入されたコレクションに基づいているだけでした。これは私がやりたいことではありません。
データを再編成して、2つのプロパティを持つクラスを作成することを強くお勧めします。1つは最初のリストの要素で、もう1つは2番目のリストの対応する要素です。次に、そのクラスのオブジェクトのリストを作成すると、通常の場合になります。
例えば。あなたが持っているとしましょう
// your first list:
List<Integer> intList = ... ;
// your second list:
List<String> stringList = ... ;
次に、定義します
public class MyDataType {
private final int intValue ;
private final String stringValue ;
public MyDataType(int intValue, String stringValue) {
this.intValue = intValue ;
this.stringValue = stringValue ;
}
public int getIntValue() {
return intValue ;
}
public String getStringValue() {
return stringValue ;
}
}
今、あなたはすることができます
TableView<MyDataType> table = new TableView<>();
for (int i = 0; i < intList.size() && i < stringList.size(); i++) {
table.getItems().add(new MyDataType(intList.get(i), stringList.get(i)));
}
通常の方法で列を定義します。
何らかの理由で実際にそのデータ変換を行うことができない場合は、テーブルのタイプを整数と見なすことができます。各行の値は2つのリストへのインデックスです。リストのサイズまでの値0, 1,...
をテーブルに入力します。これは次のようになります。
import Java.util.Arrays;
import Java.util.List;
import javafx.application.Application;
import javafx.beans.property.ReadOnlyIntegerWrapper;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class TableViewByColumns extends Application {
@Override
public void start(Stage primaryStage) {
List<Integer> intValues = Arrays.asList(1, 2, 3, 4, 5);
List<String> stringValues = Arrays.asList("One", "Two", "Three", "Four", "Five");
TableView<Integer> table = new TableView<>();
for (int i = 0; i < intValues.size() && i < stringValues.size(); i++) {
table.getItems().add(i);
}
TableColumn<Integer, Number> intColumn = new TableColumn<>("Value");
intColumn.setCellValueFactory(cellData -> {
Integer rowIndex = cellData.getValue();
return new ReadOnlyIntegerWrapper(intValues.get(rowIndex));
});
TableColumn<Integer, String> nameColumn = new TableColumn<>("Name");
nameColumn.setCellValueFactory(cellData -> {
Integer rowIndex = cellData.getValue();
return new ReadOnlyStringWrapper(stringValues.get(rowIndex));
});
table.getColumns().add(intColumn);
table.getColumns().add(nameColumn);
primaryStage.setScene(new Scene(new BorderPane(table), 600, 600));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
コレクションを取得し、それに基づいて列にデータを入力するためのソリューションと、コレクションが後で変更されたときにObservableListを使用してテーブルを自動的に更新するためのソリューションがあるように見えるJavaFXチュートリアルを見つけました。
http://code.makery.ch/library/javafx-8-tutorial/part2/
彼らのコードには2つの属性を持つオブジェクトのリストがあり、別々の列のオブジェクトの2つの変数にアクセスする代わりに、2つの別々のリストから描画するようにコードを変更する必要があります。