私のデータがdouble[][]
のような2次元配列のJavaFXでシンプルなTableView
を作成したいのですが、これをどのように達成できるのか、いくつかのアドバイスはありますか?JavaFXでTableViewに単純なダブルマトリックスをプロットする方法は?
答えて
ファビアンはコメントで示唆したよう:
TableView<double[]>
は(double[][]
から要素を抽出し、追加テーブルにアイテムとしてごdouble[][]
配列の要素を追加しますよう
は、あなたのテーブルを定義します。それらを
ObservableList<double[]>
に)。表の列を作成し、それぞれにセル値ファクトリーを提供します。
col.setCellValueFactory(param -> new ReadOnlyObjectWrapper<>(param.getValue()[c]))
ここで、
c
は列インデックスである。セル項目をフォーマットする必要がある場合は、cell factoryも指定します。
import javafx.application.Application;
import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class MatrixTable extends Application {
private Random random = new Random(42);
private static final int N_COLS = 4;
private static final int N_ROWS = 100;
private static final int MAX_DATA_VALUE = 100;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
ObservableList<double[]> data = generateData();
TableView<double[]> table = new TableView<>(data);
table.getColumns().setAll(createColumns());
table.setPrefSize(200, 250);
stage.setScene(new Scene(table));
stage.show();
}
private ObservableList<double[]> generateData() {
return FXCollections.observableArrayList(
IntStream.range(0, N_ROWS)
.mapToObj(r ->
IntStream.range(0, N_COLS)
.mapToDouble(c -> randomValue())
.toArray()
).collect(Collectors.toList())
);
}
private List<TableColumn<double[], Double>> createColumns() {
return IntStream.range(0, N_COLS)
.mapToObj(this::createColumn)
.collect(Collectors.toList());
}
private TableColumn<double[], Double> createColumn(int c) {
TableColumn<double[], Double> col = new TableColumn<>("C" + (c + 1));
col.setCellValueFactory(param -> new ReadOnlyObjectWrapper<>(param.getValue()[c]));
return col;
}
private long randomValue() {
return Math.round(random.nextDouble() * MAX_DATA_VALUE * 100)/100.0;
}
}
あなたは私にこのラインのコードを説明できますか? javadocから
col.setCellValueFactory(param -> new ReadOnlyObjectWrapper<>(param.getValue()[c]))
:
セル値の工場は、単一のTableColumn内のすべてのセルを移入する方法を指定するように設定する必要があります。セル値ファクトリは、TableColumn.CellDataFeaturesインスタンスを提供するCallbackであり、ObservableValueが返されることを想定しています。
それでは、それは(param.getValue()
によって提供された)行のデータのdouble[]
配列から列のデータを抽出する方法を定義して行っています。データ値の周りにReadOnlyObjectWrapperを使用しているので、テーブルセルを編集可能にした場合(このサンプルでは行っていない)、編集した値を配列に書き戻しません。ラッパーは、ダブルデータ値をObservableValueに変換するために必要です(セルファクトリインターフェイスの必要に応じて)。
ええ、それは混乱していることはわかっていますが、それはテーブルビューが効率的に何百万ものデータアイテムによってvirtualized controlsに裏打ちされるのを待っています。 TableViewの仮想化機能やその他の機能が必要ない場合は、代わりにGridPaneのラベルを使用することができます。
あなたのソリューションが私を助けてくれてありがとう! コードを見て、私は単純な[解決策](http://pastebin.com/WHyxTs4a)(私はJavaの初心者の開発者です)では、double []のようなArrayList
- 1. JavaFxに単純な行を追加するtableView
- 2. Pythonで単純な関数をプロットする方法は?
- 3. JAVAFX javafx.fxml.LoadException単純なログインページ
- 4. javafxリアルタイムでグラフをプロットする方法
- 5. TableView:おそらく単純なエラー
- 6. 同じプロットで異なる長さの2つの単純な時系列をプロットする方法
- 7. JavaFX TableView PropertyValueFactoryにファイルサイズを取得する方法は?
- 8. JavaFX - SVGパスをTableView内で右にサイズ変更する方法
- 9. イベントの単純な時間軸をプロット
- 10. javaFXで単純なスライダーを作成する
- 11. Javafx update tableview with tableview
- 12. JavaFXのTableViewで別の行を選択しないようにする方法
- 13. TableView列のJavaFX CheckBox値を設定する方法は?
- 14. Pythonの単純な線形プロット
- 15. 単純なPythonプロット - 通貨と日付
- 16. tableView JavaFx
- 17. JavaFX 8でTableViewの作成をキャッチする方法
- 18. JavaFX TableViewで選択行を計算する方法
- 19. javafx - tableviewのサイズを現在のウィンドウサイズに固定する方法
- 20. javafxのtableviewセルにclickイベントを追加する方法
- 21. JavaFxでTableViewの変更を即座に表示する方法は?
- 22. JavaFX Tableviewに100個以上の名前付きカラムを追加する簡単な方法
- 23. Javaで単純なプログラムをループする方法は?
- 24. Spring web Project - 単純なフィルタを有効にする方法は?
- 25. JavaFXのスムーズなスクロールTableView
- 26. 単純なグラフのpythonをtxtファイルからプロットする
- 27. JavaFX TableView。そのユーザー入力uniqe値を確認する方法
- 28. JavaFXのTableViewからデータを保存/ロードする方法
- 29. 単純なJavaFXプログラムを実行できません
- 30. JavaFX TableView CellFactory
'new TableView()' ??? –
fabian
はい、しかし、どのように配列2DをtableViewに挿入できますか?私の行列は4つの列と150の行を持っています –