私の要件は、2つのテーブルと1つのチャートを使用してデータセットを視覚化することです。各データ要素には、その(一意の)名前とそれに属する一連のデータが含まれています。最初のテーブルには、私が持っているすべてのデータセットの名前が表示され、2番目のテーブルには、最初のテーブルで選択されているデータセット(行)に属するデータが表示されます。2番目のテーブルとグラフには同じデータが表示され、どちらも最初のテーブルで選択されているデータセット(行)に属しています。以下のコードを使用して、この動作の半分(両方のテーブルをリンクする)を達成しました。
私が現在抱えている問題は、チャートに2番目のテーブルと同じデータを表示させる方法がわからないことです。私の考えは、ChangeListenerでグラフデータを設定することですが、問題は、テーブルのデータモデルがグラフに適していない可能性があることです。TableDataModelクラスにObservableListとしてフィールドがありreadingData
ます。これは、グラフが受け入れるタイプですが、XYChart.DataではなくReadingDataのObservableListです。ReadDataクラスでXYChart.Dataを使用する方法はありますか?
私のメインクラス:
ObservableList<TableDataModel> tableData = FXCollections.observableArrayList();
// Other code omitted
/* Create the first table */
TableView<TableDataModel> myTable = new TableView<TableDataModel>();
TableColumn nameColumn = new TableColumn("Name");
nameColumn.setCellValueFactory(new PropertyValueFactory<TableDataModel, String>("name"));
// Other column omitted
myTable.setItems(tableData);
myTable.getColumns().addAll(nameColumn, ...);
// When user select on any row update the second table items
myTable.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TableDataModel>()
{
@Override
public void changed(ObservableValue<? extends TableDataModel> arg0, TableDataModel arg1, TableDataModel arg2)
{
dataTable.setItems(arg2.readingData);
}
});
/* The second table */
TableView<ReadData> dataTable = new TableView<ReadData>();
TableColumn valueColumn = new TableColumn("Value");
valueColumn.setCellValueFactory(new PropertyValueFactory<ReadData, Integer>("value"));
// Other column omitted
dataTable.setItems(null);
dataTable.getColumns().addAll(valueColumn, ...);
TableDataModel.java:
private final SimpleStringProperty name;
// Other SimpleStringProperty and its get and set method omitted
public final ObservableList<ReadData> readingData = FXCollections.observableArrayList();
ReadData.java:
// I use XYChart.Data here because I think that this might be useful when I want to show this on the chart
private SimpleObjectProperty<XYChart.Data<Integer, Integer>> value;
// Other property
// Provide this to make below line work
// valueColumn.setCellValueFactory(new PropertyValueFactory<ReadData, Integer>("value"));
public int getValue()
{
return value.get().getYValue();
}