gpt4 book ai didi

javafx - 如何使用 Javafx 在 TableView 中获取多个选定行的值?

转载 作者:行者123 更新时间:2023-12-02 04:12:38 25 4
gpt4 key购买 nike

我已经为 TableView 多选尝试了以下代码。我只想要 ArrayList 中选定行的所有 ID。但是每当我选择行而不是显示 ID 时,都会显示完整的行值。

package tabletest;

import java.util.ArrayList;
import java.util.ListIterator;
import javafx.application.Application;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
*
* @author vikassingh
*/
public class TableTest extends Application {

@Override
public void start(Stage primaryStage) {
TableView<ObservableList<String>> tableLocal = new TableView<>();
tableLocal.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

TableColumn<ObservableList<String>, String> idCol = new TableColumn<>("ID");
TableColumn<ObservableList<String>, String> nameCol = new TableColumn<>("Customer Name");

tableLocal.getColumns().addAll(nameCol);

//idCol
idCol.setCellValueFactory(cellData -> {
ObservableList<String> rowValue = cellData.getValue();
String cellValue = rowValue.get(0);
return new ReadOnlyStringWrapper(cellValue);
});

//nameCol
nameCol.setCellValueFactory(cellData -> {
ObservableList<String> rowValue = cellData.getValue();
String cellValue = rowValue.get(1);
return new ReadOnlyStringWrapper(cellValue);
});

tableLocal.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
ObservableList selectedItems = tableLocal.getSelectionModel().getSelectedItems();
System.out.println(selectedItems);

// TEST
ArrayList<String> selectedIDs = new ArrayList<String>();
for (int i = 0; i < selectedItems.size(); i++) {
ObservableList<String> innerSelectedItems = FXCollections.observableArrayList(selectedItems.get(i).toString());

for (String ID : innerSelectedItems) {
selectedIDs.add(ID);
}

}

ListIterator<String> iterator = selectedIDs.listIterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// END TEST
}
});

ObservableList<String> row1 = FXCollections.observableArrayList();
row1.add("1");
row1.add("Cust One");
ObservableList<String> row2 = FXCollections.observableArrayList();
row2.add("2");
row2.add("Cust Two");
ObservableList<String> row3 = FXCollections.observableArrayList();
row3.add("3");
row3.add("Cust Three");
ObservableList<ObservableList<String>> filteredDataLocal = FXCollections.observableArrayList();
filteredDataLocal.addAll(row1, row2, row3);
tableLocal.setItems(filteredDataLocal);

VBox root = new VBox();
root.getChildren().addAll(tableLocal);
Scene scene = new Scene(root, 300, 300);

primaryStage.setScene(scene);
primaryStage.show();
}

}

最佳答案

因为id是代表每一行的列表中的第一个元素,所以你只需要

tableLocal.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
ObservableList<ObservableList<String>> selectedItems = tableLocal.getSelectionModel().getSelectedItems();
System.out.println(selectedItems);

// TEST
ArrayList<String> selectedIDs = new ArrayList<String>();
for (ObservableList<String> row : selectedItems) {
selectedIDs.add(row.get(0));
}

ListIterator<String> iterator = selectedIDs.listIterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// END TEST
}
});

关于javafx - 如何使用 Javafx 在 TableView 中获取多个选定行的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35795493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com