本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。
一、项目介绍
基于spring boot的餐饮管理系统
项目有3个权限:系统管理员、老板、员工
二、主要功能
1.首页
2.菜谱管理:添加、菜谱、类别、库存
3.员工管理:员工编号、员工姓名、性别、年龄、操作
4.餐桌管理:桌台号、座位数、所属房间、操作
5.财务管理
6.历史订单:订单、 时间、操作
7.财务统计
三、项目运行
①运行地址
地址:http://127.0.0.1:8080/login
②账号和密码
系统管理员:admin 密码:123456
老板:xiaoming 密码:123456
员工:xiaohong 密码:123456
四、项目截图
<>单在Swing 中做了重要的改进并且更加的灵活——例如,我们可以在几乎程序中任何地方使用他们,包括在面板和程序片中。语法同它们在老的AWT 中是一样的,并且这样使出现在老AWT 的在新的Swing 也出现了:我们必须为我们的菜单艰难地编写代码,并且有一些不再作为资源支持菜单(其它事件中的一些将使它们更易转换成其它的编程语言)。另外,菜单代码相当的冗长,有时还有一些混乱。下面的方法是放置所有的关于每个菜单的信息到对象的二维数组里(这种方法可以放置我们想处理的任何事物到数组里),这种方法在解决这个问题方面领先了一步。这个二维数组被菜单所创建,因此它首先表示出菜单名,并在剩余的列中表示菜单项和它们的特性。我们会注意到数组列不必保持一致——只要我们的代码知道将发生的一切事件,每一列都可以完全不同。
这个程序的目的是允许程序设计者简单地创建表格来描述每个菜单,而不是输入代码行来建立菜单。每个菜单都产生一个菜单,表格中的第一列包含菜单名和键盘快捷键。其余的列包含每个菜单项的数据:字符串存在在菜单项中的位置,菜单的类型,它的快捷键,当菜单项被选中时被激活的动作接收器及菜单是否被激活等信息。如果列开始处是空的,它将被作为一个分隔符来处理。为了预防浪费和冗长的多个Boolean 创建的对象和类型标志,以下的这些在类开始时就作为static final 被创建:bT 和bF 描述Booleans 和哑类MType 的不同对象描述标准的菜单项(mi),复选框菜单项(cb),和单选钮菜单项(rb)。请记住一组Object 可以拥有单一的Object 句柄,并且不再是原来的值。
这个程序例子同样展示了JLables 和JMenuItems(和它们的衍生事物)如何处理图标的。一个图标经由它的构建器置放进JLable 中并当对应的菜单项被选中时被改变。
菜单条数组控制处理所有在文件菜单清单中列出的,我们想显示在菜单条上的文件菜单。我们通过这个数组去使用createMenuBar(),将数组分类成单独的菜单数据数组,再通过每个单独的数组去创建菜单。这种方法依次使用菜单数据的每一行并以该数据创建JMenu,然后为菜单数据中剩下的每一行调用createMenuItem()方法。最后,createMenuItem()方法分析菜单数据的每一行并且判断菜单类型和它的属性,再适当地创建单项。终于,像我们在菜单构建器中看到的一样,从表示createMenuBar(menuBar)的表格中创建菜单,而所有的事物都是采用递归方法处理的。
这个程序不能建立串联的菜单,但我们拥有足够的知识,如果我们需要的话,随时都能增加多级菜单进去。
><>avaFX菜单栏为JavaFX应用程序提供了一个类似于大多数桌面应用程序在其应用程序窗口顶部的可视下拉菜单。 JavaFX MenuBar由类javafx.scene.control.MenuBar表示。 以下是JavaFX菜单栏的样子截图:
创建一个菜单栏实例
在您可以使用JavaFX菜单栏之前,您必须创建一个MenuBar实例。 以下是创建JavaFX菜单栏实例的示例:
MenuBar menuBar=new MenuBar();
将菜单栏添加到场景图
在菜单栏变得可见之前,您必须将其添加到JavaFX场景图中。 以下是将JavaFX菜单栏添加到场景图的示例:
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.VBox; import javafx.stage.Stage; public class JavaFXApp extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle("JavaFX App"); MenuBar menuBar=new MenuBar(); VBox vBox=new VBox(menuBar); Scene scene=new Scene(vBox, 960, 600); primaryStage.setScene(scene); primaryStage.show(); } }
注意菜单栏是如何添加到JavaFX场景的根布局(VBox)中的。 这将菜单栏放置在应用程序窗口的顶部。
请注意,上面的示例不会将任何菜单或菜单项添加到菜单栏,因此如果您运行该示例,则实际上不会看到菜单栏。 我们将在下面的章节中看到如何添加菜单和菜单项。
创建菜单实例
一旦菜单栏实例被创建,你可以添加Menu实例(javafx.scene.control.Menu。一个Menu实例代表一个垂直菜单,包含嵌套菜单项,因此,你可以添加多个菜单栏实例到菜单栏 添加多个垂直下拉菜单。
以下是将菜单添加到菜单栏的示例:
Menu menu1=new Menu("Menu 1"); MenuBar menuBar=new MenuBar(); menuBar.getMenus().add(menu1);
以下是显示上面示例代码配置的JavaFX菜单栏的屏幕截图:
正如您所看到的,菜单栏中只有一个标题为“Menu 1”的菜单。 该菜单没有嵌套在其下的菜单项。 我们将在下面的章节中看到如何将菜单项添加到菜单中。
菜单图形
您可以通过调用setGraphic()方法来为Menu设置图形图标。 图形图标将显示在菜单的文本标签旁边。 以下是为JavaFX Menu实例设置图形图标的示例:
Menu menu=new Menu("Menu 1"); menu.setGraphic(new ImageView("file:volleyball.png"));
下面是结果菜单在JavaFX应用程序中的外观:
菜单事件
JavaFX Menu实例可以触发几个可以在应用程序中侦听的事件。 最常用的事件是:
onShowing
onShown
onHiding
onHidden
当用鼠标点击菜单时,它显示其内容。 在菜单开始显示其菜单项之前,此操作会在显示时触发事件。 一旦菜单完全可见,onShown事件就会被触发。
当用鼠标点击显示的(打开的)菜单时,它再次隐藏其内容。 此操作在菜单开始隐藏其菜单项之前触发事件隐藏。 菜单完全隐藏后,会触发onHidden事件。
您可以使用方法setOnShowing(),setOnShown(),setOnHiding()和setOnHidden()为上述事件设置菜单事件侦听器。 以下是在JavaFX菜单上为这些事件设置事件侦听器的示例:
Menu menu=new Menu("Menu 1"); menu.setonShowing(e -> { System.out.println("Showing Menu 1"); }); menu.setonShown (e -> { System.out.println("Shown Menu 1"); }); menu.setonHiding (e -> { System.out.println("Hiding Menu 1"); }); menu.setonHidden (e -> { System.out.println("Hidden Menu 1"); });
上面设置的菜单事件侦听器仅在事件触发时将消息打印到控制台。 如果你需要,你可以做更高级的事情。
添加菜单项
一旦你创建了一个Menu实例,你必须添加一个或多个MenuItem实例。 每个MenuItem对应于添加到其中的菜单中的菜单项。 以下是将2个MenuItem实例添加到菜单的示例,然后将其添加到菜单栏中:
Menu menu=new Menu("Menu 1"); MenuItem menuItem1=new MenuItem("Item 1"); MenuItem menuItem2=new MenuItem("Item 2"); menu.getItems().add(menuItem1); menu.getItems().add(menuItem2); MenuBar menuBar=new MenuBar(); menuBar.getMenus().add(menu);
以下是如果在JavaFX应用程序中使用,生成的JavaFX菜单栏的样子:
菜单项图形
您可以将一个图标添加到菜单项。 通过调用setGraphic()方法将图形图标添加到菜单项中,并将参数传递给您要用于给定菜单项的图形。 下面是一个将图像添加到上一节中示例中创建的菜单项的示例:
Menu menu=new Menu("Menu 1"); MenuItem menuItem1=new MenuItem("Item 1"); menuItem1.setGraphic(new ImageView("file:soccer.png")); MenuItem menuItem2=new MenuItem("Item 2"); menuItem1.setGraphic(new ImageView("file:basketball.png")); menu.getItems().add(menuItem1); menu.getItems().add(menuItem2); MenuBar menuBar=new MenuBar(); menuBar.getMenus().add(menu);
以下是JavaFX菜单栏的外观,图形图标添加到其菜单项中:
菜单项目事件
如果您选择任何菜单项,则前面示例中创建的菜单栏配置不起作用。 为了响应菜单项的选择,您必须在菜单项上设置事件监听器。 以下是向JavaFX菜单项添加事件侦听器的示例:
MenuItem menuItem1=new MenuItem("Item 1"); menuItem1.setonAction(e -> { System.out.println("Menu Item 1 Selected"); });
注意Java Lambda作为参数添加到MenuItem的setOnAction()方法中。 这个lambda表达式在选择菜单项时执行。
JavaFX菜单栏支持多层菜单。 嵌套在另一个菜单内的菜单称为子菜单。 Menu类扩展了Menu Item类,因此可以用作另一个Menu实例内的菜单项。 下面是一个用子菜单创建一个JavaFX菜单的例子:
Menu menu=new Menu("Menu 1"); Menu subMenu=new Menu("Menu 1.1"); MenuItem menuItem11=new MenuItem("Item 1.1.1"); subMenu.getItems().add(menuItem11); menu.getItems().add(subMenu); MenuItem menuItem1=new MenuItem("Item 1"); menu.getItems().add(menuItem1); MenuItem menuItem2=new MenuItem("Item 2"); menu.getItems().add(menuItem2); MenuBar menuBar=new MenuBar(); menuBar.getMenus().add(menu);
从上面的例子得到的JavaFX菜单栏看起来类似于这样:
检查菜单项目
JavaFX菜单栏支持在菜单中使用检查菜单项。 检查菜单项是一个菜单项,可以“选择”并保持选中状态,直到稍后取消选中。 只要保持选中状态,检查菜单项旁边会显示一个小复选标记。
检查菜单项由CheckMenuItem(javafx.scene.control.CheckMenuItem)类表示。 下面是一个带有CheckMenuItem的JavaFX菜单示例:
CheckMenuItem checkMenuItem=new CheckMenuItem("Check this!"); menu.getItems().add(checkMenuItem);
菜单实例随后需要添加到菜单栏中才能看到,如前面的示例所示。 下面是结果菜单的外观,勾选了检查菜单菜单项:
收音机菜单项
JavaFX菜单栏还支持无线电菜单项。 收音机菜单项是菜单项,其中只能选择一组菜单项中的一项 - 就像标准JavaFX单选按钮一样。
无线电菜单项由RadioMenuItem表示。 RadioMenuItem实例必须添加到一个ToggleGroup中,以使它们互斥。 这就是JavaFX如何知道哪个RadioMenuItem实例属于一起。 以下是使用一组无线菜单项的JavaFx菜单的示例:
Menu menu=new Menu("Menu 1"); RadioMenuItem choice1Item=new RadioMenuItem("Choice 1"); RadioMenuItem choice2Item=new RadioMenuItem("Choice 2"); RadioMenuItem choice3Item=new RadioMenuItem("Choice 3"); ToggleGroup toggleGroup=new ToggleGroup(); toggleGroup.getToggles().add(choice1Item); toggleGroup.getToggles().add(choice2Item); toggleGroup.getToggles().add(choice3Item); menu.getItems().add(choice1Item); menu.getItems().add(choice2Item); menu.getItems().add(choice3Item); MenuBar menuBar=new MenuBar(); menuBar.getMenus().add(menu);
以下是这个示例代码产生的JavaFx菜单的外观:
菜单项分隔符
菜单栏支持菜单项分隔符。 分隔符是分隔菜单项组的水平线。 分隔符通常用于向用户发信号通知哪些菜单项彼此相关。
菜单项分隔符由SeparatorMenuItem类表示。 下面是一个由SeparatorMenu分隔的两个菜单项的菜单示例:
MenuItem item1=new MenuItem("Item 1"); MenuItem item2=new MenuItem("Item 2"); SeparatorMenuItem separator=new SeparatorMenuItem(); menu.getItems().add(item1); menu.getItems().add(separator); menu.getItems().add(item2); MenuBar menuBar=new MenuBar(); menuBar.getMenus().add(menu);
以下是生成的JavaFX菜单的外观:
自定义控制菜单项目
JavaFX菜单栏还支持使用自定义JavaFX控件作为菜单项。 为此,您需要使用CustomMenuItem(javafx.scene.control.CustomMenuItem)类。
CustomMenuItem类有一个setContent()方法,您可以使用该方法将自定义JavaFX控件设置为在菜单中显示。 以下是一个将JavaFX按钮和JavaFX滑块显示为自定义菜单项的示例:
Menu menu=new Menu("Menu 1"); Slider slider=new Slider(0, 100, 50); CustomMenuItem customMenuItem=new CustomMenuItem(); customMenuItem.setContent(slider); customMenuItem.setHideonClick(false); menu.getItems().add(customMenuItem); Button button=new Button("Custom Menu Item Button"); CustomMenuItem customMenuItem2=new CustomMenuItem(); customMenuItem2.setContent(button); customMenuItem2.setHideonClick(false); menu.getItems().add(customMenuItem2); MenuBar menuBar=new MenuBar(); menuBar.getMenus().add(menu);
注意调用CustomMenuItem setHideOnClick(),其值为false作为参数。 这样做是为了在用户与自定义菜单项控件交互时保持菜单打开。 如果将该值设置为true,则只要用户第一次单击控件,菜单就会关闭,从而无法进一步进行交互。 对于普通的菜单项,您实际上希望菜单立即关闭,但对于您可能不想要的某些自定义菜单项。 菜单仍然可以通过再次点击菜单标题来关闭。
下面是结果菜单的外观:
>