JavaFX - 菜单栏



菜单栏是一个图形用户界面组件,显示一行水平排列的菜单,每个菜单包含一系列命令或选项。它位于窗口或屏幕顶部,为用户提供了一种方便的方式来访问应用程序的功能。一个典型的菜单栏如下图所示:

Sample Menubar

在 JavaFX 中创建菜单栏

在 JavaFX 中,菜单栏控件由名为MenuBar的类表示。此类属于javafx.scene.control包。通过实例化此类,我们可以在 JavaFX 中创建一个 MenuBar 控件。

除了 MenuBar 类之外,我们还需要以下类:

Menu

Menu类表示菜单栏中的单个菜单。它具有一个文本属性,用于定义其标签,以及一个项目属性,用于保存菜单项列表。要创建 Menu,请使用以下代码:

//Creating a menu
Menu objectOfMenu = new Menu("nameOfMenu");

MenuItem

MenuItem用于在菜单中创建一个单个命令或选项。它具有一个文本属性,用于定义其标签,以及一个 onAction 属性,用于定义用户选择它时发生的情况。它通过使用以下代码创建:

//Creating menu items for the menu
MenuItem menuItemObject = new MenuItem("nameOfMenuItem");

示例

以下示例说明如何在 JavaFX 应用程序中创建 MenuBar。将此代码保存在名为JavafxmenuBar.java的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage;
public class JavafxmenuBar extends Application {
   public void start(Stage stage) {
      //Creating the first menu
      Menu category = new Menu("Category");
      //Creating menu items for the menu
      MenuItem itemOne = new MenuItem("Programming");
      MenuItem itemTwo = new MenuItem("Cyber Security");
      MenuItem itemThree = new MenuItem("Marketing");
      //Adding all the items to the category
      category.getItems().addAll(itemOne, itemTwo, itemThree);
      //Creating another menu
      Menu library = new Menu("Library");
      //Creating menu items for the library menu
      MenuItem itemFour = new MenuItem("HTML");
      MenuItem itemFive = new MenuItem("Java");
      MenuItem itemSix = new MenuItem("JavaFX");
      //Adding all the items to library menu
      library.getItems().addAll(itemFour, itemFive, itemSix);
      //Creating the third menu
      Menu articles = new Menu("Articles");
      //Creating menu items for the articles
      MenuItem itemSeven = new MenuItem("Constructor");
      MenuItem itemEight = new MenuItem("Inheritance");
      MenuItem itemNine = new MenuItem("Current Affairs");
      //Adding all items to the menu
      articles.getItems().addAll(itemSeven, itemEight, itemNine);
      //Instantiating the MenuBar class
      MenuBar newmenubar = new MenuBar();
      //Adding all the menus to the MenuBar object
      newmenubar.getMenus().addAll(category, library, articles);
      //Setting the stage
      Group newgroup = new Group(newmenubar);
      Scene scene = new Scene(newgroup, 600, 400);
      stage.setTitle("MenuBar in JavaFX");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

要从命令提示符编译并执行保存的 Java 文件,请使用以下命令:

javac --module-path %PATH_TO_FX% --add-modules javafx.controls JavafxmenuBar.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls JavafxmenuBar

输出

执行上述代码后,将生成以下输出。

MenuBar Output

如何向菜单项添加图标?

要向菜单项添加图标,我们调用setGraphic()方法,该方法接受ImageView类的对象。图标将显示在 MenuItem 名称旁边。

示例

在以下 JavaFX 应用程序中,我们将演示如何在 MenuBar 中为菜单项添加图标。将此代码保存在名为JavafxmenuBar.java的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage;
import java.io.File;
import javafx.scene.image.ImageView;
public class JavafxmenuBar extends Application {
   public void start(Stage stage) {
      //Creating the first menu
      Menu category = new Menu("Category");
      //Creating menu items for the menu
      MenuItem itemOne = new MenuItem("Programming");
      MenuItem itemTwo = new MenuItem("Cyber Security");
      MenuItem itemThree = new MenuItem("Marketing");
      // adding icons to the menuitems
      itemOne.setGraphic(new ImageView("file:programming.png"));
      itemTwo.setGraphic(new ImageView("file:cyber.png"));
      itemThree.setGraphic(new ImageView("file:marketing.png"));
      //Adding all the items to the category
      category.getItems().addAll(itemOne, itemTwo, itemThree);
      //Creating another menu
      Menu library = new Menu("Library");
      //Creating menu items for the library menu
      MenuItem itemFour = new MenuItem("HTML");
      MenuItem itemFive = new MenuItem("Java");
      MenuItem itemSix = new MenuItem("JavaFX");
      //Adding all the items to library menu
      library.getItems().addAll(itemFour, itemFive, itemSix);
      //Creating the third menu
      Menu articles = new Menu("Articles");
      //Creating menu items for the articles
      MenuItem itemSeven = new MenuItem("Constructor");
      MenuItem itemEight = new MenuItem("Inheritance");
      MenuItem itemNine = new MenuItem("Current Affairs");
      //Adding all items to the menu
      articles.getItems().addAll(itemSeven, itemEight, itemNine);
      //Instantiating the MenuBar class
      MenuBar newmenubar = new MenuBar();
      //Adding all the menus to the MenuBar object
      newmenubar.getMenus().addAll(category, library, articles);
      //Setting the stage
      Group newgroup = new Group(newmenubar);
      Scene scene = new Scene(newgroup, 600, 400);
      stage.setTitle("MenuBar in JavaFX");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

使用以下命令从命令提示符编译并执行保存的 Java 文件:

javac --module-path %PATH_TO_FX% --add-modules javafx.controls JavafxmenuBar.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls JavafxmenuBar

输出

执行上述 JavaFX 代码后,将生成以下输出。

MenuBar Output2
广告