제 요구 사항은 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();
}
ObservableList를 통해 foreach iterate를 사용하여 해결하고 각 포인트를 ChangeListener의 그래프에 수동으로 추가합니다. – PalmRobotZ