显示ContextMenu时多个选择丢失

时间:2016-04-25 11:46:46

标签: java javafx tableview selection multipleselection

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.

0 个答案:

没有答案