Search in sources :

Example 41 with TableView

use of javafx.scene.control.TableView in project Gargoyle by callakrsos.

the class FxTableViewUtil method installCopyHandler.

@SuppressWarnings("rawtypes")
public static void installCopyHandler(TableView<?> table) {
    table.addEventHandler(KeyEvent.KEY_PRESSED, e -> {
        if (e.isConsumed())
            return;
        int type = -1;
        if (e.isControlDown() && e.getCode() == KeyCode.C) {
            if (e.isShiftDown()) {
                type = 2;
            } else {
                type = 1;
            }
        }
        if (type == -1)
            return;
        TableViewSelectionModel<?> selectionModel = table.getSelectionModel();
        SelectionMode selectionMode = selectionModel.getSelectionMode();
        boolean cellSelectionEnabled = selectionModel.isCellSelectionEnabled();
        if (!cellSelectionEnabled) {
            Object selectedItem = table.getSelectionModel().getSelectedItem();
            ObservableList<?> columns = table.getColumns();
            Optional<String> reduce = columns.stream().filter(ob -> ob instanceof TableColumn).map(obj -> (TableColumn) obj).map(tc -> tc.getCellData(selectedItem)).filter(v -> v != null).map(v -> v.toString()).reduce((o1, o2) -> o1.toString().concat("\t").concat(o2.toString()));
            reduce.ifPresent(str -> {
                FxClipboardUtil.putString(str);
                e.consume();
            });
        } else if (cellSelectionEnabled) {
            ObservableList<TablePosition> selectedCells = selectionModel.getSelectedCells();
            TablePosition tablePosition = selectedCells.get(0);
            TableColumn tableColumn = tablePosition.getTableColumn();
            int row = tablePosition.getRow();
            int col = table.getColumns().indexOf(tableColumn);
            switch(type) {
                case 1:
                    StringBuilder sb = new StringBuilder();
                    for (TablePosition cell : selectedCells) {
                        if (row != cell.getRow()) {
                            sb.append("\n");
                            row++;
                        } else if (col != table.getColumns().indexOf(cell.getTableColumn())) {
                            sb.append("\t");
                        }
                        Object cellData = cell.getTableColumn().getCellData(cell.getRow());
                        sb.append(ValueUtil.decode(cellData, cellData, "").toString());
                    }
                    FxClipboardUtil.putString(sb.toString());
                    e.consume();
                    break;
                case 2:
                    Object cellData = tableColumn.getCellData(row);
                    FxClipboardUtil.putString(ValueUtil.decode(cellData, cellData, "").toString());
                    e.consume();
                    break;
            }
        }
    });
}
Also used : KeyCode(javafx.scene.input.KeyCode) ObjectProperty(javafx.beans.property.ObjectProperty) TablePosition(javafx.scene.control.TablePosition) TextFieldTableCell(javafx.scene.control.cell.TextFieldTableCell) KeyEvent(javafx.scene.input.KeyEvent) StringConverter(javafx.util.StringConverter) Field(java.lang.reflect.Field) TableColumn(javafx.scene.control.TableColumn) TableCell(javafx.scene.control.TableCell) SelectionMode(javafx.scene.control.SelectionMode) ComboBoxTableCell(javafx.scene.control.cell.ComboBoxTableCell) Clipboard(javafx.scene.input.Clipboard) Optional(java.util.Optional) ObservableValue(javafx.beans.value.ObservableValue) ObservableList(javafx.collections.ObservableList) TableView(javafx.scene.control.TableView) Callback(javafx.util.Callback) Method(java.lang.reflect.Method) TableViewSelectionModel(javafx.scene.control.TableView.TableViewSelectionModel) TableColumn(javafx.scene.control.TableColumn) ObservableList(javafx.collections.ObservableList) TablePosition(javafx.scene.control.TablePosition) SelectionMode(javafx.scene.control.SelectionMode)

Example 42 with TableView

use of javafx.scene.control.TableView in project Gargoyle by callakrsos.

the class PivotTableViewExam method start.

/*
	 * (non-Javadoc)
	 *
	 * @see javafx.application.Application#start(javafx.stage.Stage)
	 */
@Override
public void start(Stage primaryStage) throws Exception {
    // TableView<VocStA001DVO> root = new TableView<VocStA001DVO>();
    TableView<Map<String, Object>> root = new TableView<>();
    root.setOnMouseClicked(event -> {
        System.out.println(root.getSelectionModel().getSelectedItem());
    });
    // 샘플데이터
    List<VocStA001DVO> arrayList = new ArrayList<VocStA001DVO>();
    arrayList.add(getSample("HQ", "11", "등록", "2016W1", 6));
    arrayList.add(getSample("HQ", "12", "로컬접수", "2016W1", 1));
    arrayList.add(getSample("HQ", "13", "HQ접수", "2016W1", 0));
    arrayList.add(getSample("HQ", "14", "PI리더", "2016W1", 4));
    arrayList.add(getSample("HQ", "15", "PI실무", "2016W1", 6));
    arrayList.add(getSample("HQ", "11", "등록", "2016W2", 23));
    arrayList.add(getSample("HQ", "12", "로컬접수", "2016W2", 32));
    arrayList.add(getSample("HQ", "13", "HQ접수", "2016W2", 1));
    arrayList.add(getSample("HQ", "14", "PI리더", "2016W2", 5));
    arrayList.add(getSample("HQ", "15", "PI실무", "2016W2", 9));
    arrayList.add(getSample("HQ", "11", "등록", "2016W3", 50));
    arrayList.add(getSample("HQ", "12", "로컬접수", "2016W3", 1));
    arrayList.add(getSample("HQ", "13", "HQ접수", "2016W3", 3));
    arrayList.add(getSample("HQ", "14", "PI리더", "2016W3", 1));
    arrayList.add(getSample("HQ", "15", "PI실무", "2016W3", 8));
    arrayList.add(getSample("SEDA", "11", "등록", "2016W1", 12));
    arrayList.add(getSample("SEDA", "12", "로컬접수", "2016W1", 2));
    arrayList.add(getSample("SEDA", "13", "HQ접수", "2016W1", 1));
    arrayList.add(getSample("SEDA", "14", "PI리더", "2016W1", 8));
    arrayList.add(getSample("SEDA", "15", "PI실무", "2016W1", 12));
    arrayList.add(getSample("SEDA", "11", "등록", "2016W2", 46));
    arrayList.add(getSample("SEDA", "12", "로컬접수", "2016W2", 64));
    arrayList.add(getSample("SEDA", "13", "HQ접수", "2016W2", 2));
    arrayList.add(getSample("SEDA", "14", "PI리더", "2016W2", 10));
    arrayList.add(getSample("SEDA", "15", "PI실무", "2016W2", 18));
    arrayList.add(getSample("SEDA", "11", "등록", "2016W3", 100));
    arrayList.add(getSample("SEDA", "12", "로컬접수", "2016W3", 2));
    arrayList.add(getSample("SEDA", "13", "HQ접수", "2016W3", 6));
    arrayList.add(getSample("SEDA", "14", "PI리더", "2016W3", 2));
    arrayList.add(getSample("SEDA", "15", "PI실무", "2016W3", 16));
    primaryStage.setScene(new Scene(root));
    primaryStage.show();
    Header header = new Header(Arrays.asList(new Header("vocStatusNm", "vocStatusNm")), "week", "week");
    GroupingSet headerData = new GroupingSet("cnt", "sysCode");
    header.setGroupingSet(headerData);
    List<Map<String, Object>> groupBy = groupBy(header, arrayList);
    List<TableColumn<Map<String, Object>, Object>> groupByColumns = groupByColumn(header, arrayList);
    // List<TableColumn<Map<String, Object>, Object>> collect =
    // groupBy.get(0).keySet().stream().map(k -> createColumn(k))
    // .collect(Collectors.toList());
    root.getColumns().addAll(groupByColumns);
    root.getItems().addAll(groupBy);
// List<TableColumn<VocStA001DVO, String>> columns =
// createTableColumns(header, arrayList);
// root.getColumns().addAll(columns);
// root.getItems().addAll(arrayList);
}
Also used : ArrayList(java.util.ArrayList) Scene(javafx.scene.Scene) TableColumn(javafx.scene.control.TableColumn) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) TableView(javafx.scene.control.TableView)

Example 43 with TableView

use of javafx.scene.control.TableView in project Gargoyle by callakrsos.

the class TableInfoTab method supplyNode.

@Override
public BorderPane supplyNode() {
    try {
        return FxUtil.loadAndControllerAction(TableInfoController.class, (TableInfoController c) -> {
            c.setBorTableDefine(new DatabaseTableView());
            TableView<Object> tbDefined = new TableView<>();
            c.setBorTableCollect(tbDefined);
        });
    } catch (Exception e) {
        LOGGER.error(ValueUtil.toString(e));
    }
    return new DatabaseTableView();
}
Also used : TableInfoController(com.kyj.fx.voeditor.visual.words.spec.auto.msword.ui.skin.TableInfoController) DatabaseTableView(com.kyj.fx.voeditor.visual.component.popup.DatabaseTableView) DatabaseTableView(com.kyj.fx.voeditor.visual.component.popup.DatabaseTableView) TableView(javafx.scene.control.TableView)

Example 44 with TableView

use of javafx.scene.control.TableView in project blue by kunstmusik.

the class LineView method editPoints.

private void editPoints() {
    TableView<LinePoint> table = new TableView<>();
    TableColumn<LinePoint, Double> xCol = new TableColumn<>("x");
    TableColumn<LinePoint, Double> yCol = new TableColumn<>("y");
    table.getColumns().setAll(xCol, yCol);
    table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
    table.setItems(getSelectedLine().getObservableList());
    table.setEditable(true);
    xCol.setCellValueFactory(new PropertyValueFactory<LinePoint, Double>("x"));
    xCol.setCellFactory(TextFieldTableCell.forTableColumn(new DoubleStringConverter()));
    xCol.setOnEditCommit(te -> {
        LinePoint lp = te.getRowValue();
        if (getSelectedLine().getLinePoint(0) == lp || getSelectedLine().getLinePoint(getSelectedLine().size() - 1) == lp) {
            return;
        }
        lp.setX(Utils.clamp(0.0, te.getNewValue(), 1.0));
    });
    xCol.setEditable(true);
    yCol.setCellValueFactory(new PropertyValueFactory<LinePoint, Double>("y"));
    yCol.setCellFactory(TextFieldTableCell.forTableColumn(new DoubleStringConverter()));
    yCol.setOnEditCommit(te -> {
        te.getRowValue().setY(Utils.clamp(getSelectedLine().getMin(), te.getNewValue(), getSelectedLine().getMax()));
    });
    yCol.setEditable(true);
    Dialog<ButtonType> d = new Dialog<>();
    d.initOwner(getScene().getWindow());
    d.initModality(Modality.APPLICATION_MODAL);
    d.getDialogPane().setContent(new ScrollPane(table));
    d.getDialogPane().getStylesheets().add(BlueFX.getBlueFxCss());
    d.getDialogPane().getButtonTypes().setAll(ButtonType.OK);
    d.setTitle("Edit Points");
    TableModelListener tml = tme -> {
        repaint();
    };
    getSelectedLine().addTableModelListener(tml);
    Optional<ButtonType> res = d.showAndWait();
    getSelectedLine().removeTableModelListener(tml);
}
Also used : DoubleStringConverter(javafx.util.converter.DoubleStringConverter) NumberUtilities(blue.utility.NumberUtilities) ButtonType(javafx.scene.control.ButtonType) LineList(blue.components.lines.LineList) Glow(javafx.scene.effect.Glow) MouseEvent(javafx.scene.input.MouseEvent) TextFieldTableCell(javafx.scene.control.cell.TextFieldTableCell) TableModelListener(javax.swing.event.TableModelListener) LinePoint(blue.components.lines.LinePoint) TableColumn(javafx.scene.control.TableColumn) DragDirection(blue.components.DragDirection) Utils(org.controlsfx.tools.Utils) BlueFX(blue.jfx.BlueFX) ScrollPane(javafx.scene.control.ScrollPane) ListChangeListener(javafx.collections.ListChangeListener) ContextMenu(javafx.scene.control.ContextMenu) TableView(javafx.scene.control.TableView) Color(javafx.scene.paint.Color) ObjectProperty(javafx.beans.property.ObjectProperty) Modality(javafx.stage.Modality) Dialog(javafx.scene.control.Dialog) MenuItem(javafx.scene.control.MenuItem) PropertyValueFactory(javafx.scene.control.cell.PropertyValueFactory) GraphicsContext(javafx.scene.canvas.GraphicsContext) Canvas(javafx.scene.canvas.Canvas) Line(blue.components.lines.Line) BooleanProperty(javafx.beans.property.BooleanProperty) SimpleBooleanProperty(javafx.beans.property.SimpleBooleanProperty) SimpleObjectProperty(javafx.beans.property.SimpleObjectProperty) Paint(javafx.scene.paint.Paint) Optional(java.util.Optional) DoubleStringConverter(javafx.util.converter.DoubleStringConverter) TableColumn(javafx.scene.control.TableColumn) LinePoint(blue.components.lines.LinePoint) Dialog(javafx.scene.control.Dialog) ScrollPane(javafx.scene.control.ScrollPane) TableModelListener(javax.swing.event.TableModelListener) ButtonType(javafx.scene.control.ButtonType) TableView(javafx.scene.control.TableView)

Example 45 with TableView

use of javafx.scene.control.TableView in project org.csstudio.display.builder by kasemir.

the class RulesDialog method createExpressionsTable.

/**
 * @return Node for UI elements that edit the expressions
 */
private HBox createExpressionsTable() {
    // Create table with editable rule 'bool expression' column
    final TableColumn<ExprItem<?>, String> bool_exp_col = new TableColumn<>(Messages.RulesDialog_ColBoolExp);
    bool_exp_col.setSortable(false);
    bool_exp_col.setCellValueFactory(new PropertyValueFactory<ExprItem<?>, String>("boolExp"));
    bool_exp_col.setCellFactory(tableColumn -> new TextFieldTableCell<ExprItem<?>, String>(new DefaultStringConverter()) {

        private final ChangeListener<? super Boolean> focusedListener = (ob, o, n) -> {
            if (!n)
                cancelEdit();
        };

        /* Instance initializer. */
        {
            setAlignment(Pos.CENTER_LEFT);
        }

        @Override
        public void cancelEdit() {
            ((TextField) getGraphic()).focusedProperty().removeListener(focusedListener);
            super.cancelEdit();
        }

        @Override
        public void commitEdit(final String newValue) {
            ((TextField) getGraphic()).focusedProperty().removeListener(focusedListener);
            super.commitEdit(newValue);
        }

        @Override
        public void startEdit() {
            super.startEdit();
            ((TextField) getGraphic()).focusedProperty().addListener(focusedListener);
        }
    });
    // Create table with editable rule 'value expression' column
    final TableColumn<ExprItem<?>, Node> val_exp_col = new TableColumn<>(Messages.RulesDialog_ColValExp);
    // This statement requires "val_exp_col" be defined.
    bool_exp_col.setOnEditCommit(event -> {
        final int row = event.getTablePosition().getRow();
        expression_items.get(row).boolExpProperty().set(event.getNewValue());
        ModelThreadPool.getTimer().schedule(() -> {
            Platform.runLater(() -> val_exp_col.getCellData(row).requestFocus());
        }, 123, TimeUnit.MILLISECONDS);
    });
    val_exp_col.setSortable(false);
    val_exp_col.setCellValueFactory(new PropertyValueFactory<ExprItem<?>, Node>("field"));
    val_exp_col.setCellFactory(tableColumn -> new TableCell<ExprItem<?>, Node>() {

        @Override
        protected void updateItem(final Node item, final boolean empty) {
            // calling super here is very important - don't skip this!
            super.updateItem(item, empty);
            setGraphic(item);
        }
    });
    val_exp_col.setOnEditCommit(event -> {
        final int row = event.getTablePosition().getRow();
        expression_items.get(row).fieldProperty().set(event.getNewValue());
        event.consume();
        ModelThreadPool.getTimer().schedule(() -> {
            Platform.runLater(() -> btn_add_exp.requestFocus());
        }, 1230, TimeUnit.MILLISECONDS);
    });
    expressions_table = new TableView<>(expression_items);
    expressions_table.getColumns().add(bool_exp_col);
    expressions_table.getColumns().add(val_exp_col);
    expressions_table.setEditable(true);
    expressions_table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
    expressions_table.setTooltip(new Tooltip(Messages.RulesDialog_ExpressionsTT));
    expressions_table.setPlaceholder(new Label(Messages.RulesDialog_NoExpressions));
    // Buttons
    btn_add_exp = new Button(Messages.Add, JFXUtil.getIcon("add.png"));
    btn_add_exp.setMaxWidth(Double.MAX_VALUE);
    btn_add_exp.setAlignment(Pos.CENTER_LEFT);
    btn_add_exp.setOnAction(event -> {
        selected_rule_item.addNewExpr(undo);
        expression_items.setAll(selected_rule_item.expressions);
        expressions_table.getSelectionModel().select(expression_items.size() - 1);
        final int newRow = expression_items.size() - 1;
        ModelThreadPool.getTimer().schedule(() -> {
            Platform.runLater(() -> expressions_table.edit(newRow, bool_exp_col));
        }, 123, TimeUnit.MILLISECONDS);
    });
    btn_rm_exp = new Button(Messages.Remove, JFXUtil.getIcon("delete.png"));
    btn_rm_exp.setMaxWidth(Double.MAX_VALUE);
    btn_rm_exp.setMinWidth(96);
    btn_rm_exp.setAlignment(Pos.CENTER_LEFT);
    btn_rm_exp.setDisable(true);
    btn_rm_exp.setOnAction(event -> {
        final int sel = expressions_table.getSelectionModel().getSelectedIndex();
        if (sel >= 0)
            expression_items.remove(sel);
    });
    btn_move_exp_up = new Button(Messages.MoveUp, JFXUtil.getIcon("up.png"));
    btn_move_exp_up.setMaxWidth(Double.MAX_VALUE);
    btn_move_exp_up.setAlignment(Pos.CENTER_LEFT);
    btn_move_exp_up.setDisable(true);
    btn_move_exp_up.setOnAction(event -> TableHelper.move_item_up(expressions_table, expression_items));
    btn_move_exp_down = new Button(Messages.MoveDown, JFXUtil.getIcon("down.png"));
    btn_move_exp_down.setMaxWidth(Double.MAX_VALUE);
    btn_move_exp_down.setAlignment(Pos.CENTER_LEFT);
    btn_move_exp_down.setDisable(true);
    btn_move_exp_down.setOnAction(event -> TableHelper.move_item_down(expressions_table, expression_items));
    final VBox buttons = new VBox(10, btn_add_exp, btn_rm_exp, btn_move_exp_up, btn_move_exp_down);
    final HBox content = new HBox(10, expressions_table, buttons);
    HBox.setHgrow(expressions_table, Priority.ALWAYS);
    HBox.setHgrow(buttons, Priority.NEVER);
    content.setDisable(true);
    return content;
}
Also used : Button(javafx.scene.control.Button) Pos(javafx.geometry.Pos) UndoableActionManager(org.csstudio.display.builder.util.undo.UndoableActionManager) ScriptPV(org.csstudio.display.builder.model.properties.ScriptPV) LineNumberTableCellFactory(org.csstudio.javafx.LineNumberTableCellFactory) VBox(javafx.scene.layout.VBox) AutoCompletedTableCell(org.csstudio.display.builder.representation.javafx.PVTableItem.AutoCompletedTableCell) RuleInfo(org.csstudio.display.builder.model.rules.RuleInfo) TableHelper(org.csstudio.javafx.TableHelper) ListChangeListener(javafx.collections.ListChangeListener) ComboBox(javafx.scene.control.ComboBox) WidgetProperty(org.csstudio.display.builder.model.WidgetProperty) TableView(javafx.scene.control.TableView) ModelThreadPool(org.csstudio.display.builder.model.util.ModelThreadPool) Pane(javafx.scene.layout.Pane) Orientation(javafx.geometry.Orientation) HBox(javafx.scene.layout.HBox) PVTableItem(org.csstudio.display.builder.representation.javafx.PVTableItem) SplitPane(javafx.scene.control.SplitPane) TextField(javafx.scene.control.TextField) Language(org.csstudio.javafx.SyntaxHighlightedMultiLineInputDialog.Language) PropertyValueFactory(javafx.scene.control.cell.PropertyValueFactory) Collectors(java.util.stream.Collectors) CommonWidgetProperties(org.csstudio.display.builder.model.properties.CommonWidgetProperties) Platform(javafx.application.Platform) Priority(javafx.scene.layout.Priority) List(java.util.List) BooleanProperty(javafx.beans.property.BooleanProperty) Region(javafx.scene.layout.Region) CheckBoxTableCell(javafx.scene.control.cell.CheckBoxTableCell) AutocompleteMenu(org.csstudio.display.builder.representation.javafx.AutocompleteMenu) JFXUtil(org.csstudio.display.builder.representation.javafx.JFXUtil) ObservableList(javafx.collections.ObservableList) DefaultStringConverter(javafx.util.converter.DefaultStringConverter) ExprInfoString(org.csstudio.display.builder.model.rules.RuleInfo.ExprInfoString) StringProperty(javafx.beans.property.StringProperty) ExpressionInfo(org.csstudio.display.builder.model.rules.RuleInfo.ExpressionInfo) TableViewSelectionModel(javafx.scene.control.TableView.TableViewSelectionModel) SyntaxHighlightedMultiLineInputDialog(org.csstudio.javafx.SyntaxHighlightedMultiLineInputDialog) ExprInfoValue(org.csstudio.display.builder.model.rules.RuleInfo.ExprInfoValue) Plugin.logger(org.csstudio.display.builder.editor.Plugin.logger) SimpleStringProperty(javafx.beans.property.SimpleStringProperty) ButtonType(javafx.scene.control.ButtonType) JFXBaseRepresentation(org.csstudio.display.builder.representation.javafx.widgets.JFXBaseRepresentation) FXCollections(javafx.collections.FXCollections) BackingStoreException(java.util.prefs.BackingStoreException) TextFieldTableCell(javafx.scene.control.cell.TextFieldTableCell) ArrayList(java.util.ArrayList) Level(java.util.logging.Level) TableColumn(javafx.scene.control.TableColumn) RulesWidgetProperty(org.csstudio.display.builder.model.properties.RulesWidgetProperty) Messages(org.csstudio.display.builder.representation.javafx.Messages) TableCell(javafx.scene.control.TableCell) Insets(javafx.geometry.Insets) Tooltip(javafx.scene.control.Tooltip) Dialog(javafx.scene.control.Dialog) Label(javafx.scene.control.Label) Node(javafx.scene.Node) CheckBox(javafx.scene.control.CheckBox) Preferences(java.util.prefs.Preferences) TimeUnit(java.util.concurrent.TimeUnit) SimpleBooleanProperty(javafx.beans.property.SimpleBooleanProperty) SimpleObjectProperty(javafx.beans.property.SimpleObjectProperty) ScriptsDialog(org.csstudio.display.builder.representation.javafx.ScriptsDialog) DialogHelper(org.csstudio.javafx.DialogHelper) Widget(org.csstudio.display.builder.model.Widget) ChangeListener(javafx.beans.value.ChangeListener) PropInfo(org.csstudio.display.builder.model.rules.RuleInfo.PropInfo) HBox(javafx.scene.layout.HBox) Node(javafx.scene.Node) Tooltip(javafx.scene.control.Tooltip) Label(javafx.scene.control.Label) ExprInfoString(org.csstudio.display.builder.model.rules.RuleInfo.ExprInfoString) TableColumn(javafx.scene.control.TableColumn) DefaultStringConverter(javafx.util.converter.DefaultStringConverter) Button(javafx.scene.control.Button) TextField(javafx.scene.control.TextField) VBox(javafx.scene.layout.VBox)

Aggregations

TableView (javafx.scene.control.TableView)70 TableColumn (javafx.scene.control.TableColumn)60 Map (java.util.Map)40 List (java.util.List)39 ArrayList (java.util.ArrayList)38 Button (javafx.scene.control.Button)38 Label (javafx.scene.control.Label)38 FXCollections (javafx.collections.FXCollections)37 Insets (javafx.geometry.Insets)36 Collectors (java.util.stream.Collectors)33 Scene (javafx.scene.Scene)33 Tab (javafx.scene.control.Tab)33 BorderPane (javafx.scene.layout.BorderPane)32 Optional (java.util.Optional)31 ObservableValue (javafx.beans.value.ObservableValue)30 VBox (javafx.scene.layout.VBox)29 Collections (java.util.Collections)28 MenuItem (javafx.scene.control.MenuItem)28 HashMap (java.util.HashMap)27 Set (java.util.Set)27