龙空技术网

JavaFX菜单栏实例

JAVA茶杯会 148

前言:

现在朋友们对“java菜单的价格实验报告”都比较讲究,看官们都想要知道一些“java菜单的价格实验报告”的相关知识。那么小编在网上网罗了一些关于“java菜单的价格实验报告””的相关资讯,希望小伙伴们能喜欢,咱们一起来了解一下吧!

JavaFX菜单栏为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);}@Overridepublic 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,则只要用户第一次单击控件,菜单就会关闭,从而无法进一步进行交互。 对于普通的菜单项,您实际上希望菜单立即关闭,但对于您可能不想要的某些自定义菜单项。 菜单仍然可以通过再次点击菜单标题来关闭。

下面是结果菜单的外观:

标签: #java菜单的价格实验报告 #java下拉菜单组件 #java 下拉菜单 #java窗口菜单栏