类javafx.scene.control.Menu源码实例Demo

下面列出了怎么用javafx.scene.control.Menu的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: NSMenuFX   文件: RenameMenuItem.java
@Override
public void start(Stage primaryStage) throws Exception {
	StackPane root = new StackPane();
	primaryStage.setScene(new Scene(root, 300, 250));
	primaryStage.requestFocus();
	primaryStage.show();

	// Get the toolkit
	MenuToolkit tk = MenuToolkit.toolkit();

	// Create the default Application menu
	Menu defaultApplicationMenu = tk.createDefaultApplicationMenu("test");

	// Update the existing Application menu
	tk.setApplicationMenu(defaultApplicationMenu);

	// Since we now have a reference to the menu, we can rename items
	defaultApplicationMenu.getItems().get(1).setText("Hide all the otters");
}
 
源代码2 项目: PreferencesFX   文件: DemoView.java
private void initializeParts() {
  menuBar = new MenuBar();
  menu = new Menu("Edit");
  preferencesMenuItem = new MenuItem("Preferences");

  welcomeLbl = new Label();
  brightnessLbl = new Label();
  nightModeLbl = new Label();
  scalingLbl = new Label();
  screenNameLbl = new Label();
  resolutionLbl = new Label();
  orientationLbl = new Label();
  favoritesLbl = new Label();
  fontSizeLbl = new Label();
  lineSpacingLbl = new Label();
  favoriteNumberLbl = new Label();
}
 
源代码3 项目: LogFX   文件: LogFX.java
@MustCallOnJavaFXThread
private Menu fileMenu() {
    Menu menu = new Menu( "_File" );
    menu.setMnemonicParsing( true );

    MenuItem open = new MenuItem( "_Open File" );
    open.setAccelerator( new KeyCodeCombination( KeyCode.O, KeyCombination.SHORTCUT_DOWN ) );
    open.setMnemonicParsing( true );
    open.setOnAction( ( event ) -> new FileOpener( stage, this::open ) );

    MenuItem showLogFxLog = new MenuItem( "Open LogFX Log" );
    showLogFxLog.setAccelerator( new KeyCodeCombination( KeyCode.O,
            KeyCombination.SHORTCUT_DOWN, KeyCombination.SHIFT_DOWN ) );
    showLogFxLog.setOnAction( ( event ) ->
            open( LogFXLogFactory.INSTANCE.getLogFilePath().toFile() ) );

    MenuItem close = new MenuItem( "E_xit" );
    close.setAccelerator( new KeyCodeCombination( KeyCode.W,
            KeyCombination.SHIFT_DOWN, KeyCombination.SHORTCUT_DOWN ) );
    close.setMnemonicParsing( true );
    close.setOnAction( ( event ) -> stage.close() );
    menu.getItems().addAll( open, showLogFxLog, close );

    return menu;
}
 
源代码4 项目: pdfsam   文件: WorkspaceMenu.java
@Inject
public WorkspaceMenu(RecentWorkspacesService service) {
    super(DefaultI18nContext.getInstance().i18n("_Workspace"));
    this.service = service;
    setId("workspaceMenu");
    MenuItem load = new MenuItem(DefaultI18nContext.getInstance().i18n("_Load"));
    load.setId("loadWorkspace");
    load.setOnAction(e -> loadWorkspace());
    MenuItem save = new MenuItem(DefaultI18nContext.getInstance().i18n("_Save"));
    save.setOnAction(e -> saveWorkspace());
    save.setId("saveWorkspace");
    recent = new Menu(DefaultI18nContext.getInstance().i18n("Recen_ts"));
    recent.setId("recentWorkspace");
    service.getRecentlyUsedWorkspaces().stream().map(WorkspaceMenuItem::new).forEach(recent.getItems()::add);
    MenuItem clear = new MenuItem(DefaultI18nContext.getInstance().i18n("_Clear recents"));
    clear.setOnAction(e -> clearWorkspaces());
    clear.setId("clearWorkspaces");
    getItems().addAll(load, save, new SeparatorMenuItem(), recent, clear);
    eventStudio().addAnnotatedListeners(this);
}
 
源代码5 项目: marathonv5   文件: RFXMenuItem.java
private String getTagForMenu(MenuItem source) {
    LinkedList<MenuItem> menuItems = new LinkedList<>();
    while (source != null) {
        menuItems.addFirst(source);
        source = source.getParentMenu();
    }
    if (menuItems.getFirst() instanceof Menu) {
        if (menuItems.size() >= 2) {
            ownerNode = menuItems.get(1).getParentPopup().getOwnerNode();
            return isMenuBar(ownerNode) ? "#menu" : "#contextmenu";
        }
    } else {
        ownerNode = menuItems.getFirst().getParentPopup().getOwnerNode();
        return "#contextmenu";
    }
    return null;
}
 
源代码6 项目: marathonv5   文件: RFXMenuItemTest.java
@Test
public void menuPath() {
    List<String> path = new ArrayList<>();
    Platform.runLater(() -> {
        Menu menuFile = new Menu("File");
        MenuItem add = new MenuItem("Shuffle");
        MenuItem clear = new MenuItem("Clear");
        MenuItem exit = new MenuItem("Exit");
        menuFile.getItems().addAll(add, clear, new SeparatorMenuItem(), exit);
        RFXMenuItem rfxMenuItem = new RFXMenuItem(null, null);
        path.add(rfxMenuItem.getSelectedMenuPath(clear));
    });
    new Wait("Waiting for menu selection path") {
        @Override
        public boolean until() {
            return path.size() > 0;
        }
    };
    AssertJUnit.assertEquals("File>>Clear", path.get(0));
}
 
源代码7 项目: marathonv5   文件: RFXMenuItemTest.java
@Test
public void menuItemIconNoText() {
    List<String> path = new ArrayList<>();
    Platform.runLater(() -> {
        Menu menuFile = new Menu("File");
        MenuItem add = new MenuItem("Shuffle");
        MenuItem clear = new MenuItem();
        clear.setGraphic(new ImageView(RFXTabPaneTest.imgURL.toString()));
        MenuItem exit = new MenuItem("Exit");
        menuFile.getItems().addAll(add, clear, new SeparatorMenuItem(), exit);
        RFXMenuItem rfxMenuItem = new RFXMenuItem(null, null);
        path.add(rfxMenuItem.getSelectedMenuPath(clear));
    });
    new Wait("Waiting for menu selection path") {
        @Override
        public boolean until() {
            return path.size() > 0;
        }
    };
    AssertJUnit.assertEquals("File>>middle", path.get(0));
}
 
源代码8 项目: marathonv5   文件: RFXMenuItemTest.java
@Test
public void subMenuPath() {
    List<String> path = new ArrayList<>();
    Platform.runLater(() -> {
        Menu menuEdit = new Menu("Edit");
        Menu menuEffect = new Menu("Picture Effect");

        final MenuItem noEffects = new MenuItem("No Effects");

        menuEdit.getItems().addAll(menuEffect, noEffects);
        MenuItem add = new MenuItem("Shuffle");
        menuEffect.getItems().addAll(add);
        RFXMenuItem rfxMenuItem = new RFXMenuItem(null, null);
        path.add(rfxMenuItem.getSelectedMenuPath(add));
    });
    new Wait("Waiting for menu selection path") {
        @Override
        public boolean until() {
            return path.size() > 0;
        }
    };
    AssertJUnit.assertEquals("Edit>>Picture Effect>>Shuffle", path.get(0));
}
 
源代码9 项目: marathonv5   文件: RFXMenuItemTest.java
@Test
public void duplicateMenuPath() {
    List<String> path = new ArrayList<>();
    Platform.runLater(() -> {
        Menu menuFile = new Menu("File");
        MenuItem add = new MenuItem("Shuffle");

        MenuItem clear = new MenuItem("Clear");
        MenuItem clear1 = new MenuItem("Clear");
        MenuItem clear2 = new MenuItem("Clear");

        MenuItem exit = new MenuItem("Exit");

        menuFile.getItems().addAll(add, clear, clear1, clear2, new SeparatorMenuItem(), exit);
        RFXMenuItem rfxMenuItem = new RFXMenuItem(null, null);
        path.add(rfxMenuItem.getSelectedMenuPath(clear2));
    });
    new Wait("Waiting for menu selection path") {
        @Override
        public boolean until() {
            return path.size() > 0;
        }
    };
    AssertJUnit.assertEquals("File>>Clear(2)", path.get(0));
}
 
源代码10 项目: Recaf   文件: BytecodeContextHandling.java
private void handleVariableType(VariableSelection selection) {
	ContextMenu menu = new ContextMenu();
	Menu refs = new Menu(LangUtil.translate("ui.edit.method.referrers"));
	for (AST ast : root.getChildren()) {
		if (ast instanceof VarInsnAST && ((VarInsnAST) ast).getVariableName().getName().equals(selection.name)) {
			MenuItem ref = new ActionMenuItem(ast.getLine() + ": " + ast.print(), () -> {
				int line = ast.getLine() - 1;
				codeArea.moveTo(line, 0);
				codeArea.requestFollowCaret();
			});
			refs.getItems().add(ref);
		}
	}
	if (refs.getItems().isEmpty())
		refs.setDisable(true);
	menu.getItems().add(refs);
	codeArea.setContextMenu(menu);
}
 
源代码11 项目: Recaf   文件: BytecodeContextHandling.java
private void handleSwitchType(SwitchSelection selection) {
	ContextMenu menu = new ContextMenu();
	Menu refs = new Menu(LangUtil.translate("ui.edit.method.follow"));
	for(AST ast : root.getChildren()) {
		if(ast instanceof LabelAST) {
			String name = ((LabelAST) ast).getName().getName();
			String key = selection.mappings.get(name);
			if (key == null && name.equals(selection.dflt))
				key = "Default";
			if(key != null) {
				MenuItem ref = new ActionMenuItem(key + ": '" + ast.getLine() + ": " + ast.print() +"'", () -> {
					int line = ast.getLine() - 1;
					codeArea.moveTo(line, 0);
					codeArea.requestFollowCaret();
				});
				refs.getItems().add(ref);
			}
		}
	}
	if(refs.getItems().isEmpty())
		refs.setDisable(true);
	menu.getItems().add(refs);
	codeArea.setContextMenu(menu);
}
 
源代码12 项目: jmonkeybuilder   文件: PhysicsControlTreeNode.java
@Override
@FxThread
public void fillContextMenu(@NotNull final NodeTree<?> nodeTree,
                            @NotNull final ObservableList<MenuItem> items) {

    if (getElement() instanceof PhysicsCollisionObject) {

        final Menu changeShapeMenu = new Menu(Messages.MODEL_NODE_TREE_ACTION_CHANGE_COLLISION_SHAPE, new ImageView(Icons.ADD_12));
        changeShapeMenu.getItems().addAll(new GenerateCollisionShapeAction(nodeTree, this),
                new CreateBoxCollisionShapeAction(nodeTree, this),
                new CreateCapsuleCollisionShapeAction(nodeTree, this),
                new CreateConeCollisionShapeAction(nodeTree, this),
                new CreateCylinderCollisionShapeAction(nodeTree, this),
                new CreateSphereCollisionShapeAction(nodeTree, this));

        items.add(changeShapeMenu);
    }

    super.fillContextMenu(nodeTree, items);
}
 
源代码13 项目: NSMenuFX   文件: SampleMenuBar.java
@Override
public void start(Stage primaryStage) throws Exception {
	StackPane root = new StackPane();
	primaryStage.setScene(new Scene(root, 300, 250));
	primaryStage.requestFocus();
	primaryStage.show();

	MenuToolkit tk = MenuToolkit.toolkit();

	MenuBar bar = new MenuBar();

	MenuItem item1 = new MenuItem("Item1");
	MenuItem item2 = new MenuItem("Item2");
	MenuItem item3 = new MenuItem("Item3");
	item3.setOnAction(new EventHandler<ActionEvent>() {
		@Override
		public void handle(ActionEvent event) {
			System.out.println("Item3 clicked");
		}
	});

	MenuItem item4 = tk.createQuitMenuItem("my app");

	Menu menu2 = new Menu("Menu2");
	menu2.getItems().add(item2);
	Menu menu1 = new Menu("Menu1");
	menu1.getItems().addAll(item1, menu2, item4);

	Menu menu3 = new Menu("Menu3");
	menu3.getItems().addAll(item3);

	bar.getMenus().addAll(menu1, menu3);

	tk.setMenuBar(primaryStage, bar);

}
 
源代码14 项目: mars-sim   文件: SampleMenuBar.java
@Override
public void start(Stage primaryStage) throws Exception {
	StackPane root = new StackPane();
	primaryStage.setScene(new Scene(root, 300, 250));
	primaryStage.requestFocus();
	primaryStage.show();

	MenuToolkit tk = MenuToolkit.toolkit();

	MenuBar bar = new MenuBar();

	MenuItem item1 = new MenuItem("Item1");
	MenuItem item2 = new MenuItem("Item2");
	MenuItem item3 = new MenuItem("Mute");
	item3.setOnAction(new EventHandler<ActionEvent>() {
		@Override
		public void handle(ActionEvent event) {
			System.out.println("Muted");
		}
	});

	MenuItem quit = tk.createQuitMenuItem("mars-sim");

	Menu menu2 = new Menu("Menu2");
	menu2.getItems().add(item2);
	
	Menu menu1 = new Menu("Menu1");
	menu1.getItems().addAll(item1, menu2, quit);

	Menu file = new Menu("File");
	file.getItems().addAll(item3);

	bar.getMenus().addAll(menu1, file);

	tk.setMenuBar(primaryStage, bar);

}
 
源代码15 项目: scenic-view   文件: ScenicViewGui.java
private void updateMenuBar(final Tab oldValue, final Tab newValue) {
    if (oldValue != null && oldValue instanceof ContextMenuContainer) {
        Menu menu = ((ContextMenuContainer) oldValue).getMenu();
        menuBar.getMenus().remove(menu);
    }
    if (newValue != null && newValue instanceof ContextMenuContainer) {
        Menu newMenu = ((ContextMenuContainer) newValue).getMenu();
        if (newMenu != null) {
            menuBar.getMenus().add(menuBar.getMenus().size() - 1, newMenu);
        }
    }
}
 
源代码16 项目: classpy   文件: MyMenuBar.java
private void createHelpMenu() {
    MenuItem aboutMenuItem = new MenuItem("_About");
    aboutMenuItem.setOnAction(e -> AboutDialog.showDialog());
    aboutMenuItem.setMnemonicParsing(true);

    Menu helpMenu = new Menu("_Help");
    helpMenu.getItems().add(aboutMenuItem);
    helpMenu.setMnemonicParsing(true);

    getMenus().add(helpMenu);
}
 
源代码17 项目: LogFX   文件: LogFX.java
@MustCallOnJavaFXThread
private Menu viewMenu() {
    Menu menu = new Menu( "_View" );
    menu.setMnemonicParsing( true );

    CheckMenuItem highlight = new CheckMenuItem( "_Highlight Options" );
    highlight.setAccelerator( new KeyCodeCombination( KeyCode.H, KeyCombination.SHORTCUT_DOWN ) );
    highlight.setMnemonicParsing( true );
    bindMenuItemToDialog( highlight, () ->
            showHighlightOptionsDialog( highlightOptions ) );

    MenuItem orientation = new MenuItem( "Switch Pane Orientation" );
    orientation.setAccelerator( new KeyCodeCombination( KeyCode.S,
            KeyCombination.SHIFT_DOWN, KeyCombination.SHORTCUT_DOWN ) );
    orientation.setOnAction( event -> logsPane.switchOrientation() );

    CheckMenuItem font = new CheckMenuItem( "Fon_t" );
    font.setAccelerator( new KeyCodeCombination( KeyCode.F,
            KeyCombination.SHIFT_DOWN, KeyCombination.SHORTCUT_DOWN ) );
    font.setMnemonicParsing( true );
    bindMenuItemToDialog( font, () -> showFontPicker( config.fontProperty() ) );

    CheckMenuItem filter = new CheckMenuItem( "Enable _filters" );
    filter.setAccelerator( new KeyCodeCombination( KeyCode.F,
            KeyCombination.SHORTCUT_DOWN ) );
    filter.setMnemonicParsing( true );
    filter.selectedProperty().bindBidirectional( config.filtersEnabledProperty() );

    MenuItem showContextMenu = new MenuItem( "Show Context Menu" );
    showContextMenu.setAccelerator( new KeyCodeCombination( KeyCode.E, KeyCombination.SHORTCUT_DOWN ) );
    showContextMenu.setOnAction( event -> logsPane.showContextMenu() );

    menu.getItems().addAll( highlight, orientation, font, filter, showContextMenu );
    return menu;
}
 
源代码18 项目: tcMenu   文件: TestUtils.java
public static Collection<MenuItem> findItemsInMenuWithId(FxRobot robot, String menuToFind) {
    MenuBar menuBar = robot.lookup("#mainMenu").query();
    MenuItem menu =  menuBar.getMenus().stream().flatMap(m-> m.getItems().stream())
            .filter(m -> menuToFind.equals(m.getId()))
            .findFirst().orElseThrow(RuntimeException::new);
    return ((Menu)menu).getItems();
}
 
源代码19 项目: tcMenu   文件: TestUtils.java
public static Collection<MenuItem> recurseGetAllMenus(FxRobot robot, Collection<MenuItem> items) {
    var ret = new ArrayList<MenuItem>();
    for (MenuItem item : items) {
        ret.add(item);
        if(item instanceof Menu) {
            ret.addAll(recurseGetAllMenus(robot, ((Menu)item).getItems()));
        }
    }
    return ret;
}
 
源代码20 项目: WorkbenchFX   文件: NavigationDrawerTestModule.java
private void addSubmenu(int items, int subItems) {
  for (int i = 0; i < items; i++) {
    Menu subMenu = new Menu("New Submenu " + itemsCount++);
    itemsLst.add(subMenu);
    for (int j = 0; j < subItems; j++) {
      subMenu.getItems().add(new MenuItem("New Sub MenuItem " + (j + 1)));
    }
    getWorkbench().getNavigationDrawerItems().add(subMenu);
  }
}
 
源代码21 项目: WorkbenchFX   文件: CustomNavigationDrawerSkin.java
private MenuButton buildSubmenu(MenuItem item) {
  Menu menu = (Menu) item;
  MenuButton menuButton = new MenuButton();
  menuButton.setPopupSide(Side.RIGHT);
  menuButton.graphicProperty().bind(menu.graphicProperty());
  menuButton.textProperty().bind(menu.textProperty());
  menuButton.disableProperty().bind(menu.disableProperty());
  menuButton.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
  menuButton.getStyleClass().addAll(item.getStyleClass());
  Bindings.bindContent(menuButton.getItems(), menu.getItems());

  // To determine if a TOUCH_RELEASED event happens.
  // The MOUSE_ENTERED results in an unexpected behaviour on touch events.
  // Event filter triggers before the handler.
  menuButton.addEventFilter(TouchEvent.TOUCH_RELEASED, e -> isTouchUsed = true);

  // Only when ALWAYS or SOMETIMES
  if (!Priority.NEVER.equals(getSkinnable().getMenuHoverBehavior())) {
    menuButton.addEventHandler(MouseEvent.MOUSE_ENTERED, e -> { // Triggers on hovering over Menu
      if (isTouchUsed) {
        isTouchUsed = false;
        return;
      }
      // When ALWAYS, then trigger immediately. Else check if clicked before (case: SOMETIMES)
      if (Priority.ALWAYS.equals(getSkinnable().getMenuHoverBehavior())
          || (hoveredBtn != null && hoveredBtn.isShowing())) {
        menuButton.show(); // Shows the context-menu
        if (hoveredBtn != null && hoveredBtn != menuButton) {
          hoveredBtn.hide(); // Hides the previously hovered Button if not null and not self
        }
      }
      hoveredBtn = menuButton; // Add the button as previously hovered
    });
  }
  return menuButton;
}
 
源代码22 项目: WorkbenchFX   文件: NavigationDrawerSkin.java
private void buildMenu() {
  menuContainer.getChildren().clear();
  for (MenuItem item : getSkinnable().getItems()) {
    if (item instanceof Menu) {
      // item is a submenu
      menuContainer.getChildren().add(buildSubmenu(item));
    } else {
      // item is a regular menu item
      menuContainer.getChildren().add(buildMenuItem(item));
    }
  }
}
 
源代码23 项目: PreferencesFX   文件: DemoView.java
private void initializeParts() {
  menuBar = new MenuBar();
  menu = new Menu("Edit");
  preferencesMenuItem = new MenuItem("Preferences");

  welcomeLbl = new Label();
  brightnessLbl = new Label();
  nightModeLbl = new Label();
  scalingLbl = new Label();
}
 
源代码24 项目: paintera   文件: BrowseRecentFavorites.java
private static Menu matcherAsMenu(
		final String menuText,
		final List<String> candidates,
		final Consumer<String> processSelection) {


	final Menu menu = new Menu(menuText);
	final Consumer<String> hideAndProcess = selection -> {
		menu.getParentMenu();
		menu.hide();

		for (Menu m = menu.getParentMenu(); m != null; m = m.getParentMenu())
			m.hide();
		Optional.ofNullable(menu.getParentPopup()).ifPresent(ContextMenu::hide);

		processSelection.accept(selection);
	};
	final MatchSelection matcher = MatchSelection.fuzzySorted(candidates, hideAndProcess);
	matcher.setMaxWidth(400);

	final CustomMenuItem cmi = new CustomMenuItem(matcher, false);
	menu.setOnShowing(e -> {Platform.runLater(matcher::requestFocus);});
	// clear style to avoid weird blue highlight
	cmi.getStyleClass().clear();
	menu.getItems().setAll(cmi);

	return menu;
}
 
源代码25 项目: paintera   文件: OpenDialogMenu.java
public Optional<Menu> getMenu(
		String menuText,
		PainteraBaseView viewer,
		Supplier<String> projectDirectory,
		Consumer<Exception> exceptionHandler)
{
	try {
		return Optional.of(getMenu(menuText, viewer, projectDirectory));
	} catch (InstantiableException e) {
		exceptionHandler.accept(e);
		return Optional.empty();
	}
}
 
源代码26 项目: paintera   文件: OpenDialogMenu.java
public Menu getMenu(
		final String menuText,
		final PainteraBaseView viewer,
		final Supplier<String> projectDirectory) throws InstantiableException
{
	List<Pair<String, Consumer<ActionEvent>>> asConsumers = new ArrayList<>();
	final List<Pair<String, BiConsumer<PainteraBaseView, Supplier<String>>>> handlers = new ArrayList<>(getMenuEntries());
	for (Pair<String, BiConsumer<PainteraBaseView, Supplier<String>>> handler : handlers)
	{
		Consumer<ActionEvent> consumer = event -> handler.getValue().accept(viewer, projectDirectory);
		asConsumers.add(new Pair<>(handler.getKey(), consumer));
	}
	return new MenuFromHandlers(asConsumers).asMenu(menuText);
}
 
源代码27 项目: marathonv5   文件: DisplayWindow.java
/**
 * Create Menu with new file/folder options
 * 
 * @return
 */
private Menu createNewMenu() {
    Menu newMenu = new Menu("New");
    newMenu.getItems().add(newTestcaseAction.getMenuItem());
    newMenu.getItems().add(etAction.getMenuItem());
    newMenu.getItems().add(newModuleAction.getMenuItem());
    newMenu.getItems().add(newFixtureAction.getMenuItem());
    newMenu.getItems().add(newCheckListAction.getMenuItem());
    newMenu.getItems().add(newModuleDirAction.getMenuItem());
    newMenu.getItems().add(newSuiteFileAction.getMenuItem());
    newMenu.getItems().add(newFeatureFileAction.getMenuItem());
    newMenu.getItems().add(newStoryFileAction.getMenuItem());
    newMenu.getItems().add(newIssueFileAction.getMenuItem());
    return newMenu;
}
 
源代码28 项目: marathonv5   文件: JavaFXElementPropertyAccessor.java
public String parentMenuText(ObservableList<Menu> menus, int index) {
    String original = getMenuText(menus, index);
    String itemText = original;
    int suffixIndex = 0;
    for (int i = 0; i < index; i++) {
        String current = getMenuText(menus, i);
        if (current.equals(original)) {
            itemText = String.format("%s(%d)", original, ++suffixIndex);
        }
    }
    return itemText;
}
 
源代码29 项目: marathonv5   文件: JavaFXElementPropertyAccessor.java
private String getMenuText(ObservableList<Menu> menus, int index) {
    Menu menu = menus.get(index);
    String text = menu.getText();
    if (text == null || "".equals(text)) {
        return getMenuTextFromIcon(menu, index);
    }
    return text;
}
 
源代码30 项目: marathonv5   文件: JavaFXElementPropertyAccessor.java
public String getTextForMenuItem(MenuItem menuItem, Menu parentMenu) {
    int index = parentMenu.getItems().indexOf(menuItem);
    String original = getMenuItemText(parentMenu, index);
    String itemText = original;
    int suffixIndex = 0;

    for (int i = 0; i < index; i++) {
        String current = getMenuItemText(parentMenu, i);

        if (current.equals(original)) {
            itemText = String.format("%s(%d)", original, ++suffixIndex);
        }
    }
    return itemText;
}
 
 类所在包
 同包方法