有问题!! 在javafx表视图中,我通过Shift + mouseClick或Clt + MouseClick应用了多个选定模式。通过这个
tblViewCurrentStore.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
tblViewCurrentStore.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
}
});
它在GUI上没问题,但问题是,如果我使用这段代码,它会给我最后一个选择单元格的值,
private void btnDeleteOnAction(ActionEvent event) {
System.out.println(tblViewCurrentStore.getSelectionModel().getSelectedItem().getProductName().toString());
}
Out Put
SAMSUNG HDD
但是当我使用这段代码时,它会给出这个!
private void btnDeleteOnAction(ActionEvent event) {
System.out.println(tblViewCurrentStore.getSelectionModel().getSelectedItems().toString());
}
它给我这种类型的输出
[List.ListProduct@3a22ea22, List.ListProduct@6d99efa2, List.ListProduct@40fd0f67]
但我需要选择多行然后按删除它会显示所有选定的数据,如第一行。
答案 0 :(得分:0)
您的代码存在多个问题:
tblViewCurrentStore.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
只需要设置一次(因此它是一个setter)。在TableView
初始化之后而不是每次点击都要这样做。
SelectionModel#getSelectedItem()
明确说明了它的作用:
返回当前选定的对象(位于选定的索引位置)。 如果选择了多个项目,这将返回getSelectedIndex()返回的索引中包含的对象(它始终是最近选择的项目的索引)。
SelectionModel#getSelectedItems
返回所有选定的对象(如在Java Object
中)。所以如果你想要名字,你可以这样:
List<String> names = tblViewCurrentStore.getSelectionModel().getSelectedItems().stream()
.map(ListProduct::getProductName)
.collect(Collectors.toList());
答案 1 :(得分:0)
您甚至可以使用此:
ArrayList<YourModel> products = new ArrayList<>(table.getSelectionModel().getSelectedItems());
for (YourModel model : models) {
System.out.println(model);
}
//或
final List<YourModel> collect = table.getSelectionModel().getSelectedItems().stream().collect(Collectors.toList());