我有一个小问题;
我目前有2个来自不同对象的列表,我无法更改;
private ObservableList<People1> people1List = FXCollections.observableArrayList();
private ObservableList<People2> people2List = FXCollections.observableArrayList();
当我尝试在表格中添加数据时,我在每列中只有第二个值:
people2List = FXCollections.observableArrayList(people1.getObservable().values());
peopleTable.setItems(people2List.sorted(new DataValueComparator()));
people1List = FXCollections.observableArrayList(peopl2.getObservable().values());
peopleTable.setItems(people1List.sorted(new DataValueComparator()));
如何在列上执行“setItems()”?然后在列中有2个不同的observables objets?
我知道如果我执行setItems两次,它将覆盖第一个,但是列上有方法setItems
请,任何帮助将不胜感激
答案 0 :(得分:2)
将两个可观察列表显示在同一个tableview中的一种解决方案如下:
instaceof
检查Person是instaceof Person1
还是instanceof Person2
,现在您可以设置第一个人或import numpy as np
from skimage.measure import marching_cubes
arr1 = np.zeros((4,4,4))
arr2 = np.zeros((4,4,4))
# Perfect match of structure and voxel layout
arr1[:,1,:] = 0.5
# Mismatch of structure and voxel layout
arr2[:,1:3,:] = 0.25
# Finds the surface
v1, s2, n1, val1 = marching_cubes(arr1, level=0.4)
# Does not find the surface
v2, s2, n2, val2 = marching_cubes(arr2, level=0.4)
第二栏。我希望这会对你有所帮助。
答案 1 :(得分:2)
您无法为每列设置不同的项目。
但是,您可以使用cellValueFactory
从列表中提取值:
final ObservableList<People1> source1 = people1List.sorted(new DataValueComparator());
final ObservableList<People2> source2 = people2List.sorted(new DataValueComparator());
TableView<Integer> tableView = new TableView<>();
InvalidationListener listener = o -> {
// keep items size the max of list sizes
int newSize = Math.max(source1.size(), source2.size());
if (tableView.getItems().size() > newSize) {
tableView.getItems().subList(newSize, tableView.getItems().size()).clear();
} else {
for (int i = tableView.getItems().size(); i < newSize; i++) {
tableView.getItems().add(i);
}
}
};
source1.addListener(listener);
source2.addListener(listener);
TableColumn<Integer, People1> column1 = ...
column1.setCellValueFactory(cd -> Bindings.valueAt(source1, cd.getValue()));
TableColumn<Integer, People2> column2 = ...
column2.setCellValueFactory(cd -> Bindings.valueAt(source2, cd.getValue()));
tableView.getColumns().addAll(column1, column2);
答案 2 :(得分:1)
不,您无法在ListView中显示两个不同的列表。 您可以使用像Dina描述的界面来解决您的问题。
或者当你真的无法改变两个People类时。您可以为每个People Class创建一个包含两个构造函数的类,并在ListView中表示这些对象的List,如:
public class People{
//some variable
public People(People1 p1){
}
public People(People2 p2){
}
}
private ObservableList<People> peopleList = FXCollections.observableArrayList();
并在ListView中显示peopleList
。