0

私の要件は、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();
}
4

1 に答える 1

0

AFAIKはXYChart.Data、最初にsを入れてXYChart.Seriesから、そのシリーズを。によってチャートに入れる必要がありますchart.getData().add(series)。myTableで選択した変更リスナーでこれを実行できると思います。そこで新しいシリーズを作成し(または既存の、以前に作成して追加したシリーズを変更し)、value.get()からすべての値を追加しますReadDataLineChartの例を参照してください。

于 2012-06-13T07:40:24.600 に答える