在TableView
中使用多个选择时,单击所选行上的辅助按钮以使用表的ContextMenu
将取消选择除已单击的行之外的任何选定行。为什么会这样?如果您无法在上下文菜单中选择可应用于该选择的选项,那么多重选择的重点是什么?
我认为这可能是一个错误。这是因为在某些情况下,当我在下面的示例中选择多行时,将保留选择。我无法弄清楚选择何时被保留的任何模式,它似乎随机发生。
更新 评论指出,这种行为不是随机的。如果单击非真实列的行的一部分,则选择将丢失。对我来说,这种行为并不直观。
以下是允许多项选择的基本TableView
的MCVE。
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
public class TestMultipleSelection extends Application {
@Override
public void start(Stage stage) {
// Table
TableView<ObservableList<String>> table = new TableView<ObservableList<String>>();
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
// Column
TableColumn<ObservableList<String>, String> col = new TableColumn<ObservableList<String>, String>("Column");
col.setCellValueFactory(e -> new SimpleStringProperty(e.getValue().get(0)));
table.getColumns().add(col);
// Data
ObservableList<ObservableList<String>> items = FXCollections.observableArrayList(
FXCollections.observableArrayList("One"), FXCollections.observableArrayList("Two"), FXCollections.observableArrayList("Three"));
table.setItems(items);
// ContextMenu
ContextMenu contextMenu = new ContextMenu();
MenuItem item1 = new MenuItem("Item1");
contextMenu.getItems().add(item1);
table.setContextMenu(contextMenu);
stage.setScene(new Scene(table));
stage.show();
}
public static void main(String[] args) {
launch();
}
}
经过测试的平台:
Windows 8.1 Enterprise, 64-bit; Java 8u92.
Windows 7 Enterprise SP1, 64-bit; Java 8u92.