TableView多选项将所选对象之一返回为null.这种情况不会每次都发生,但是当我尝试在table.
similar to the issue defined in this question中选择两行时,大多数情况都会发生这种情况
重现问题的最佳方法是尝试选择两个连续的行.
FXML:
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.Label?> <?import javafx.scene.control.ProgressBar?> <?import javafx.scene.control.TableColumn?> <?import javafx.scene.control.TableView?> <?import javafx.scene.control.TextField?> <?import javafx.scene.control.cell.PropertyValueFactory?> <?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.Region?> <?import javafx.scene.layout.StackPane?> <AnchorPane xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.test.controller.TestController"> <children> <TableView fx:id="personsTable" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="35.0"> <placeholder> <Label text="" /> </placeholder> <columns> <TableColumn text="Name"> <cellValueFactory> <PropertyValueFactory property="name" /> </cellValueFactory> </TableColumn> <TableColumn text="Address"> <cellValueFactory> <PropertyValueFactory property="address" /> </cellValueFactory> </TableColumn> <TableColumn text="Course"> <cellValueFactory> <PropertyValueFactory property="course" /> </cellValueFactory> </TableColumn> <TableColumn text="Country"> <cellValueFactory> <PropertyValueFactory property="country" /> </cellValueFactory> </TableColumn> </columns> </TableView> </children> </AnchorPane>
控制器:
import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle; import com.test.model.Person; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.ContextMenu; import javafx.scene.control.MenuItem; import javafx.scene.control.SelectionMode; import javafx.scene.control.TableView; public class TestController implements Initializable { @FXML TableView<Person> personsTable = new TableView<Person>(); @Override public void initialize(URL location,ResourceBundle resources) { // TODO Auto-generated method stub MenuItem combine = new MenuItem("Select"); combine.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { List<Person> selectedPersons = new ArrayList<Person>( personsTable.getSelectionModel().getSelectedItems()); for (Person person : selectedPersons) { System.out.println(" the object is " + person); } } }); ContextMenu contextMenu = new ContextMenu(); contextMenu.getItems().add(combine); personsTable.setContextMenu(contextMenu); personsTable.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); personsTable.setItems(getPendingOrders()); } public ObservableList<Person> getPendingOrders() { ObservableList<Person> persons = FXCollections.observableArrayList(); for (int i = 0; i < 100; i++) { Person person = new Person(); person.setName("Name" + i); person.setAddress("Address" + i); person.setCountry("Country" + i); person.setCourse("Course" + i); persons.add(person); } return persons; } }
型号:
public class Person { public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getCourse() { return course; } public void setCourse(String course) { this.course = course; } private String name; private String address; private String country; private String course; }