2012-06-13 2 views
0

제 요구 사항은 2 개의 테이블과 1 개의 차트를 사용하여 데이터 세트를 시각화하는 것입니다. 각 데이터 요소에는 고유 한 이름과 이에 속하는 데이터가 들어 있습니다. 첫 번째 테이블에는 내가 가지고있는 모든 데이터 세트의 이름이 표시되고 두 번째 테이블에는 첫 번째 테이블에서 선택된 데이터 세트 (행)에 속한 데이터가 표시됩니다. 두 번째 테이블과 차트에는 동일한 데이터가 표시되며 둘 다 첫 번째 테이블에서 선택된 데이터 집합 (행)에 속합니다. 아래 코드를 사용하여이 두 가지 (테이블 연결) 동작의 절반을 달성했습니다.JavaFX2에서 tableviews와 lineChart를 함께 바인딩하십시오.

현재 문제는 다음과 같습니다. 차트에 두 번째 테이블과 동일한 데이터를 표시하는 방법을 알 수 없습니다. 내 생각은 ChangeListener에서 차트 데이터를 설정하는 것이지만 문제는 차트의 데이터 모델이 차트와 적합하지 않을 가능성이 높다는 것입니다. 내가 readingData 필드 ObservableList TableDataModel 클래스에서 차트 받아 들일 수 있지만 ObservableList of 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(); 
} 

답변

0

가 AFAIK 당신이 XYChart.Series 처음으로 XYChart.Data의를 둘 필요, 그런 다음 해당 시리즈를 chart.getData().add(series)으로 차트에 넣습니다. myTable의 선택된 변경 리스너에서이 작업을 수행 할 수 있다고 생각합니다. 새 시리즈를 작성하거나 기존의 기존 시리즈를 수정하고 새로 추가 한 시리즈는 의 값을 모두 ReadData에서 추가하십시오. example of LineChart을 참조하십시오.

+0

ObservableList를 통해 foreach iterate를 사용하여 해결하고 각 포인트를 ChangeListener의 그래프에 수동으로 추가합니다. – PalmRobotZ

관련 문제