FilteredList
和SortedList
只是包裝了一個普通ObservableList
。由於您必須擁有原始列表,只需使用list.indexOf()
查找該行中數據的索引即可。
public class FilteredTable extends Application {
public static void main(String[] args){launch(args);}
@Override
public void start(Stage stage) {
ObservableList<LineItem> items = FXCollections.observableArrayList();
for (int i = 0;i<10;i++){items.add(new LineItem(i+"'th", i));}
TableView tableView = new TableView();
FilteredList<LineItem> evens = new FilteredList<>(items, p->p.amountProperty().get()%2==0);
SortedList<LineItem> sorted = new SortedList<>(evens);
sorted.comparatorProperty().bind(tableView.comparatorProperty());
tableView.setItems(sorted);
TableColumn<LineItem,String> descCol = new TableColumn<>("desc");
descCol.setCellValueFactory(new PropertyValueFactory<>("desc"));
TableColumn<LineItem, Double> amountCol = new TableColumn<>("amount");
amountCol.setCellValueFactory(new PropertyValueFactory<>("amount"));
Label label = new Label("click a row");
tableView.setRowFactory(tv -> {
TableRow<ObservableList> row = new TableRow<>();
row.setOnMouseClicked(event -> {
if (event.getClickCount() == 2 && (!row.isEmpty())) {
label.setText(tableView.getSelectionModel().getSelectedIndex()
+" <-tbl row, idx in items-> "
+items.indexOf(tableView.getSelectionModel().getSelectedItem()));
}
});
return row;
});
tableView.getColumns().addAll(descCol,amountCol);
stage.setScene(new Scene(new VBox(5,tableView,label),300,300));
stage.show();
}
public class LineItem {
private final StringProperty desc = new SimpleStringProperty();
private final IntegerProperty amount = new SimpleIntegerProperty();
public StringProperty descProperty() {return desc;}
public IntegerProperty amountProperty() {return amount;}
public LineItem(String dsc, int amt) {
desc.set(dsc); amount.set(amt);
}
}
}
爲了什麼目的,您需要解析原始索引?通常情況下,您需要的所有內容都應該與您的模型元素一起存儲,即在TableView中顯示,因此您不必執行其他查找。 – eckig 2014-11-24 18:54:17
我不使用模型,因爲數據是動態添加的(來自數據庫)。我有一條消息應該對每一行都是唯一的。 – miniHessel 2014-11-24 19:02:17
我有一條消息應該對每一行都是唯一的,我將所有消息存儲在一個字符串列表中。如果我有原始行索引,我可以做list.get(originalIndex) – miniHessel 2014-11-24 19:08:50