gpt4 book ai didi

java - 将一个 MenuItem 添加到多个菜单

转载 作者:行者123 更新时间:2023-11-30 06:45:48 26 4
gpt4 key购买 nike

我目前正在 JavaFX8 中为图书馆(书籍)开发菜单栏。我想将 MenuItem 添加到多个菜单。如果我这样做,输出将是一条警告,指出此 MenuItem 已添加,并且在应用程序中未显示图书菜单。

代码:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
public void start(Stage stage) {

//Layout: BorderPane
BorderPane layout = new BorderPane();

//Define what is where
layout.setTop(addMenuBar());

//make it visible
Scene scene = new Scene(layout, 900, 600);
stage.setScene(scene);
stage.setTitle("Library");
stage.show();
}

public MenuBar addMenuBar() {
//create the menubar
MenuBar menu = new MenuBar();

//create the menus
Menu fileMenu = new Menu("File");
Menu bookMenu = new Menu("Book");
Menu manageMenu = new Menu("Manage");
Menu sortMenu = new Menu("Sort");

//create the menu items
MenuItem exitItem = new MenuItem("Exit");
MenuItem booksAlphabetical = new MenuItem("Books alphabetical");
MenuItem encAlphabetical = new MenuItem("Encyclopedias alphabetical");
MenuItem addBook = new MenuItem("Add book");
MenuItem addCategory = new MenuItem("Add category");
MenuItem addPublisher = new MenuItem("Add Publisher");
MenuItem booksReview = new MenuItem("Books sorted by review");


//make the menus ready


//file menu
fileMenu.getItems().add(exitItem);

//bookMenu
bookMenu.getItems().addAll(addBook, booksAlphabetical,
encAlphabetical, booksReview);
//manageMenu
manageMenu.getItems().addAll(addBook, addCategory, addPublisher);

//sortMenu
sortMenu.getItems().addAll(booksAlphabetical, encAlphabetical, booksReview);

//add menus to the menubar
menu.getMenus().addAll(fileMenu, bookMenu, manageMenu, sortMenu);

//return the menubar
return menu;
}
}

提前致谢!

最佳答案

简单地说,发生这种情况是因为您将一个节点放置到两个不同的父节点(请参阅两次使用的 booksAlphabetical):

bookMenu.getItems().addAll(addBook, booksAlphabetical, encAlphabetical, booksReview); 
sortMenu.getItems().addAll(booksAlphabetical, encAlphabetical, booksReview);

不知道 MenuItems booksAlphabetical、encAlphabetical、booksReview 应该出现在哪里,因此它们只会添加到最后一个 sortMenu

为什么会发生这种情况? JavaFX API 的构建是每个 Node 都有一组属性,包括唯一的父属性。

解决方案是第二次创建它们以使它们独一无二,因为您想使用它们两次。

MenuItem booksAlphabeticalSort = new MenuItem("Books alphabetical");
MenuItem encAlphabeticalSort = new MenuItem("Encyclopedias alphabetical");
MenuItem booksReviewSort = new MenuItem("Books sorted by review");

sortMenu.getItems().addAll(booksAlphabeticalSort, encAlphabeticalSort, booksReviewSort);

关于java - 将一个 MenuItem 添加到多个菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43706816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com