1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
   | public class Main extends Application {
 
    @Override
    public void start(Stage primaryStage) {
        final Properties properties = System.getProperties();
        final List<String> keys = new ArrayList(properties.stringPropertyNames());
        Collections.sort(keys);
        final TableView<String> tableView = new TableView();
        tableView.getItems().setAll(keys);
        keys.clear();
        final TableColumn<String, String> keyColumn = new TableColumn("Key");
        keyColumn.setCellValueFactory((TableColumn.CellDataFeatures<String, String> p) -> {
            final String key = p.getValue();
            return new SimpleStringProperty(key);
        });
        final TableColumn<String, String> valueColumn = new TableColumn("Value");
        valueColumn.setCellValueFactory((TableColumn.CellDataFeatures<String, String> p) -> {
            final String key = p.getValue();
            final String value = properties.getProperty(key);
            return new SimpleStringProperty(value);
        });
        tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
        tableView.getColumns().setAll(keyColumn, valueColumn);
        tableView.setRowFactory((TableView<String> tv) -> {
            final TableRow<String> row = new TableRow<String>() {
                final ContextMenu rowMenu = new ContextMenu();
 
                {
                    final MenuItem editItem = new MenuItem("Edit");
                    editItem.setId("rpt01");
                    editItem.setOnAction((ActionEvent event) -> {
                        final String key = getItem();
                        System.out.printf("%%%%%% %s - %s", editItem.getId(), key).println();
                    });
                    MenuItem removeItem = new MenuItem("Delete");
                    removeItem.setId("rpt02");
                    removeItem.setOnAction((ActionEvent event) -> {
                        final String key = getItem();
                        System.out.printf("%%%%%% %s - %s", removeItem.getId(), key).println();
                    });
                    rowMenu.getItems().addAll(editItem, removeItem);
                    contextMenuProperty().bind(
                            Bindings.when(Bindings.isNotNull(itemProperty()))
                            .then(rowMenu)
                            .otherwise((ContextMenu) null));
                    setOnMouseClicked((MouseEvent e) -> rowMenu.show(tableView, e.getScreenX(), e.getScreenY()));
                }
 
                @Override
                protected void updateItem(String t, boolean bln) {
                    super.updateItem(t, bln);
                }
            };
            return row;
        });
        final StackPane root = new StackPane();
        root.getChildren().add(tableView);
        final Scene scene = new Scene(root, 600, 600);
        primaryStage.setTitle("Test TableView ContextMenu");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
} | 
Partager