举报投诉联系我们 手机版 热门标签 VUE中文网
您的位置:VUE中文网 > javafx菜单栏 JavaFX 菜单

javafx菜单栏 JavaFX 菜单

2023-03-06 15:17 Java教程

javafx菜单栏 JavaFX 菜单

javafx菜单栏

JavaFX菜单栏是一种用于构建用户界面的强大工具,它可以帮助开发人员快速创建复杂的应用程序。它提供了一种方便的方法来创建菜单,菜单项,子菜单,快捷键和其他功能。

JavaFX菜单栏可以使用JavaFX API中的MenuBar类来创建。MenuBar类是一个容器,可以包含多个Menu对象。每个Menu对象都有一个文本标签,并且可以包含多个MenuItem对象。

使用JavaFX API中的MenuItem类可以创建不同类型的菜单项,如CheckBoxMenuItem、RadioButtonMenuItem、SeparatorMenuItem、CustomMenuItem、HyperlinkMenuItem等。这些都是特定的子类,它们都有特定的功能。

// 创建一个新的 MenuBar 实例 
 MenuBar menuBar = new MenuBar(); 
 
 // 创建一个新的 Menu 实例 
 Menu menu = new Menu("File"); 
 
 // 创建一个新的 MenuItem 实例 
 MenuItem menuItem = new MenuItem("Open"); 
 
 // 把 menu 添加到 menuBar 中  
 menuBar.getMenus().add(menu);  

 // 把 menuItem 添加到 menu 中  
 menu.getItems().add(menuItem);   

此外,还可以使用JavaFX API中的ContextMenu类来创建上下文菜单。上下文菜单是在特定位置显示时才会出现的特殊菜单,通常会附带相关信息或者操作选项。

// 创建一个新的 ContextMenu 实例  
 ContextMenu contextMenu = new ContextMenu();  

 // 创建一个新的 MenuItem 实例  
 MenuItem contextmenuitem = new MenuItem("Copy");  

 // 把 contextmenuitem 添加到 contextmenu 中  
 contextmenu.getItems().add(contextmenuitem); 

此外,还可以使用JavaFX API中的Toolbar 类来创建工具栏。工具栏是一行图标或者控件,用于快速执行常用命令或者操作。

// 创建一个新 Toolbar 的实例    Toolbar toolbar = new Toolbar();   

 // 这里你可以往 toolbar 里面添加你想要显示在工具栏上面图标或者控件    toolbar.getItems().addAll(button1, button2, button3); 

总之,JavaFX 菜单栏是开发人员在开发 JavaFX 用户界面时不可或缺的重要工具之一。它能够帮助开发人员快速而有效地创建出复杂而引人注目的应用界面。

JavaFX 菜单

JavaFX教程 - JavaFX 菜单


菜单是桌面应用程序选择选项的标准方法。

菜单和菜单项可以具有用于选择选项的键组合,称为键盘快捷键。

创建菜单和菜单项

我们必须创建一个菜单栏 javafx.scene.control.MenuBar 对象来保存 javafx.scene.control.Menu 对象。

菜单对象可以包含 Menu 和 javafx.scene.control.MenuItem 对象。菜单可以包含其他菜单作为子菜单。MenuItems 是 Menu 对象内的子选项。

以下代码显示如何创建菜单栏并添加菜单和菜单项。

菜单类是 MenuItem 的子类,它有一个 ​getItems()​。​add() ​方法,它能够添加例如其他 Menu 和 MenuItem 实例。

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.CheckMenuItem;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.RadioMenuItem;
import javafx.scene.control.SeparatorMenuItem;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class Main extends Application {

  @Override
  public void start(Stage primaryStage) {
    BorderPane root = new BorderPane();
    Scene scene = new Scene(root, 300, 250, Color.WHITE);

    MenuBar menuBar = new MenuBar();
    menuBar.prefWidthProperty().bind(primaryStage.widthProperty());
    root.setTop(menuBar);

    // File menu - new, save, exit
    Menu fileMenu = new Menu("File");
    MenuItem newMenuItem = new MenuItem("New");
    MenuItem saveMenuItem = new MenuItem("Save");
    MenuItem exitMenuItem = new MenuItem("Exit");
    exitMenuItem.setOnAction(actionEvent -> Platform.exit());

    fileMenu.getItems().addAll(newMenuItem, saveMenuItem,
        new SeparatorMenuItem(), exitMenuItem);

    Menu webMenu = new Menu("Web");
    CheckMenuItem htmlMenuItem = new CheckMenuItem("HTML");
    htmlMenuItem.setSelected(true);
    webMenu.getItems().add(htmlMenuItem);

    CheckMenuItem cssMenuItem = new CheckMenuItem("CSS");
    cssMenuItem.setSelected(true);
    webMenu.getItems().add(cssMenuItem);

    Menu sqlMenu = new Menu("SQL");
    ToggleGroup tGroup = new ToggleGroup();
    RadioMenuItem mysqlItem = new RadioMenuItem("MySQL");
    mysqlItem.setToggleGroup(tGroup);

    RadioMenuItem oracleItem = new RadioMenuItem("Oracle");
    oracleItem.setToggleGroup(tGroup);
    oracleItem.setSelected(true);

    sqlMenu.getItems().addAll(mysqlItem, oracleItem,
        new SeparatorMenuItem());

    Menu tutorialManeu = new Menu("Tutorial");
    tutorialManeu.getItems().addAll(
        new CheckMenuItem("Java"),
        new CheckMenuItem("JavaFX"),
        new CheckMenuItem("Swing"));

    sqlMenu.getItems().add(tutorialManeu);

    menuBar.getMenus().addAll(fileMenu, webMenu, sqlMenu);

    primaryStage.setScene(scene);
    primaryStage.show();
  }
  public static void main(String[] args) {
    launch(args);
  }
}

上面的代码生成以下结果。

null

特殊菜单项

要将选中的选项或单选按钮添加到菜单,我们可以使用以下选项 MenuItem 类的子类。

以下列表显示了可用作菜单选项的可用 MenuItem 子类。

  • javafx.scene.control.CheckMenuItem
  • javafx.scene.control.RadioMenuItem
  • javafx.scene.control.CustomMenuItem
  • javafx.scene.control.SeparatorMenuItem
  • javafx.scene.control.Menu

CheckMenuItem 菜单项类似于复选框控件,允许用户选择项目。

RadioMenuItem 菜单项类似于 RadioButton 控件,允许用户从项目组中仅选择一个项目。

要创建自定义菜单项,我们可以使用 CustomMenuItem 类。

SeparatorMenuItem 是 CustomMenuItem 类型的派生类显示用于分隔菜单项的视线。

使用 CustomMenuItem 将 Slider 添加到 MenuItem

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.CustomMenuItem;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.SeparatorMenuItem;
import javafx.scene.control.Slider;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class Main extends Application {
    public static void main(String[] args) {
        Application.launch(args);
    }
    
    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Menus");
        Group root = new Group();
        Scene scene = new Scene(root, 300, 250, Color.WHITE);
        
        MenuBar menuBar = new MenuBar();
        
        Menu menu = new Menu("File");
        menu.getItems().add(new MenuItem("New"));
        menu.getItems().add(new MenuItem("Save"));
        menu.getItems().add(new SeparatorMenuItem());
        menu.getItems().add(new MenuItem("Exit"));

        CustomMenuItem customMenuItem = new CustomMenuItem(new Slider());
        customMenuItem.setHideOnClick(false);
        menu.getItems().add(customMenuItem);
        
        menuBar.getMenus().add(menu);
        
        menuBar.prefWidthProperty().bind(primaryStage.widthProperty());
        
        root.getChildren().add(menuBar); 
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

上面的代码生成以下结果。

null


要向菜单项添加事件处理程序,我们可以使用 ​setOnAction() ​方法,它接收一个类型为 ​​EventHandler <ActionEvent​>​ 的功能接口,它是在选择菜单项时调用的处理程序代码。

import javafx.application.Application;
import javafx.application.Platform;
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.scene.paint.Color;
import javafx.stage.Stage;

public class Main extends Application {

  @Override
  public void start(Stage primaryStage) {
    BorderPane root = new BorderPane();
    Scene scene = new Scene(root, 300, 250, Color.WHITE);

    MenuBar menuBar = new MenuBar();
    menuBar.prefWidthProperty().bind(primaryStage.widthProperty());
    root.setTop(menuBar);

    Menu fileMenu = new Menu("File");
    MenuItem exitMenuItem = new MenuItem("Exit");
    fileMenu.getItems().add(exitMenuItem);
    exitMenuItem.setOnAction(actionEvent -> Platform.exit());

    menuBar.getMenus().addAll(fileMenu);

    primaryStage.setScene(scene);
    primaryStage.show();
  }
  public static void main(String[] args) {
    launch(args);
  }
}

上面的代码生成以下结果。

null

关键助记符

标准菜单通常具有键盘助记符,以在不使用鼠标的情况下选择菜单项。

用户可以点击 Alt 键和带下划线 _ 的字母来激活菜单,然后使用箭头键导航。

要向菜单添加键助记符,我们使用String值和调用构造函数在菜单或菜单项的文本中,在所选字母前面放置一个下划线字符。

然后我们将 ​true​ 传递给​setMnemonicParsing(true)​方法。

以下代码创建一个使用字母“F"作为助记符的文件菜单。

Menu fileMenu = new Menu("_File");
fileMenu.setMnemonicParsing(true);

完整的源代码

import javafx.application.Application;
import javafx.application.Platform;
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.scene.paint.Color;
import javafx.stage.Stage;

public class Main extends Application {

  @Override
  public void start(Stage primaryStage) {
    BorderPane root = new BorderPane();
    Scene scene = new Scene(root, 300, 250, Color.WHITE);

    MenuBar menuBar = new MenuBar();
    menuBar.prefWidthProperty().bind(primaryStage.widthProperty());
    root.setTop(menuBar);

    Menu fileMenu = new Menu("_File");
    fileMenu.setMnemonicParsing(true);
    MenuItem exitMenuItem = new MenuItem("Exit");
    fileMenu.getItems().add(exitMenuItem);
    exitMenuItem.setOnAction(actionEvent -> Platform.exit());

    menuBar.getMenus().addAll(fileMenu);

    primaryStage.setScene(scene);
    primaryStage.show();
  }
  public static void main(String[] args) {
    launch(args);
  }
}

上面的代码生成以下结果。

null

键组合

键组合是用于选择菜单选项的键击的组合。键组合称为键盘快捷键。

例如,在 Windows平台上,Ctrl + S 的组合键可以保存文件。在Mac OS平台上,组合键为 Command + S.

Ctrl,Command,Alt,Shift 和 Meta 等键称为修饰键。

通常,修饰符与单个字母组合使用。

要创建键组合,使用 KeyCode 组合对象并传递击键和修饰符。

以下代码创建 (Ctrl或Meta)+ S 的键代码组合。

MenuItem saveItem = new MenuItem("_Save");
saveItem.setMnemonicParsing(true);
saveItem.setAccelerator(new KeyCodeCombination(KeyCode.S, KeyCombination.SHORTCUT_DOWN));

代码使用 KeyCombination.SHORTCUT_DOWN 值作为键修饰符而不是 CONTROL_DOWN 或 META_DOWN。 SHORTCUT_DOWN 的值将启用应用程序跨平台。

值 CONTROL_DOWN和META_DOWN 是系统依赖于 Windows 和 MacOS 平台,但 SHORTCUT_DOWN 适用于所有平台。

上下文菜单

上下文菜单是当用户右键单击鼠标按钮时显示的弹出菜单。

要创建上下文菜单,使用 ContextMenu 类。ContextMenu 菜单有一个 ​getItems()​。​add()​方法来添加菜单项。

以下代码显示了使用菜单项 (exitItem) 实例化的上下文菜单:

ContextMenu  contextFileMenu = new ContextMenu(exitItem);

要响应鼠标右键单击,请添加事件处理程序以侦听右键单击事件调用上下文菜单的​show()​方法。

以下代码设置了一个事件处理程序来显示和隐藏上下文菜单基于右或左鼠标点击。

hide()​方法是通过主鼠标单击(左键单击)以删除上下文菜单。

primaryStage.addEventHandler(MouseEvent.MOUSE_CLICKED,  (MouseEvent  me) ->  {
    if (me.getButton() == MouseButton.SECONDARY  || me.isControlDown())  {
        contextFileMenu.show(root, me.getScreenX(), me.getScreenY());
    }  else  {
        contextFileMenu.hide();
    }
});


阅读全文
以上是VUE中文网为你收集整理的javafx菜单栏 JavaFX 菜单全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 VUE中文网 vue88.com 版权所有 联系我们