2012-06-13 33 views
0

我的要求是使用2個表格和1個圖表來形象化我的數據集。每個數據元素包含其(唯一)名稱和屬於它的一堆數據。第一個表格將顯示我擁有的每個數據集的名稱,第二個表格將顯示屬於在第一個表格中選擇的數據集(行)的數據。第二個表格和圖表將顯示相同的數據,並且都屬於在第一個表格中選擇的數據集(行)。現在通過使用下面的代碼,我已經實現了這一行爲的一半(連接兩個表)。在JavaFX2中綁定2個tableviews和一個lineChart

我現在有的問題是:我無法弄清楚如何讓圖表顯示與第二個表相同的數據。我的想法是在ChangeListener中設置圖表數據,但問題在於表格的數據模型很可能不適合圖表。我有readingData字段作爲TableDataModel類中的ObservableList,它是圖表接受的類型,但它是ReadingData的ObservableList而非XYChart.Data。有什麼辦法可以在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(); 
} 

回答

0

據我所知,你需要把你的XYChart.Data S插入XYChart.Series第一,然後通過chart.getData().add(series)將該系列放入圖表中。我認爲你可以在myTable選擇的更改監聽器中執行此操作:創建一個新系列(或修改現有的,先前創建並添加的系列),添加ReadData中的所有value.get()值。請參閱example of LineChart

+0

使用foreach進行求解通過遍歷ObservableList並在ChangeListener中手動添加每個點到圖中 – PalmRobotZ

相關問題