纯Java JavaFX 2.0菜单

在有关JavaFX的最新文章中 ,我集中讨论了不使用JavaFX 1.x的JavaFXScript和不使用JavaFX 2.0的新FXML来使用JavaFX 2.0的新Java API 。 所有这些示例均已使用标准Java编译器进行了编译,并使用标准Java启动 器执行。 在本文中,我将继续演示使用JavaFX 2.0支持的纯Java API的主题,同时演示JavaFX 2.0菜单的开发。

在本文的后面,我将列出此示例的整个代码清单,但首先显示代码片段,以使您更轻松地专注于每一部分。 使用JavaFX 2.0菜单的一个很好的起点是实例化MenuBar的实例。 如下所示,这很简单。

实例化javafx.scene.control.MenuBar

final MenuBar menuBar = new MenuBar();

MenuBar可以包含Menu实例作为其子级,并且每个Menu实例都可以具有MenuItem的实例作为其子级。 下一个代码清单演示了Menu实例化,将MenuItem实例(或SeparatorMenuItem的实例)添加到该Menu实例,然后将Menu实例添加到MenuBar的实例。

将新实例化的Menu和MenuItem实例添加到MenuBar

// Prepare left-most 'File' drop-down menu
final Menu fileMenu = new Menu('File');
fileMenu.getItems().add(new MenuItem('New'));
fileMenu.getItems().add(new MenuItem('Open'));
fileMenu.getItems().add(new MenuItem('Save'));
fileMenu.getItems().add(new MenuItem('Save As'));
fileMenu.getItems().add(new SeparatorMenuItem());
fileMenu.getItems().add(new MenuItem('Exit'));
menuBar.getMenus().add(fileMenu);

上面的示例对于实际使用而言过于简化。 没有任何与单击任何菜单项相关联的事件处理程序或操作,并且没有通过击键而不是通过鼠标单击来选择菜单项的方法。 下一个代码清单演示了MenuItem实例的实例化,这些实例不仅包含文本字符串,还包含更多内容。 在此代码清单中,有一个使用MenuItemBuilder构建更复杂的MenuItem的示例,该MenuItem包括与按键组合的关联以及与动作处理程序的关联。

具有击键和事件关联的更复杂的MenuItem实例化

// Prepare 'Help' drop-down menu
final Menu helpMenu = new Menu('Help');
final MenuItem searchMenuItem = new MenuItem('Search');
searchMenuItem.setDisable(true);
helpMenu.getItems().add(searchMenuItem);
final MenuItem onlineManualMenuItem = new MenuItem('Online Manual');
onlineManualMenuItem.setVisible(false);
helpMenu.getItems().add(onlineManualMenuItem);
helpMenu.getItems().add(new SeparatorMenuItem());
final MenuItem aboutMenuItem =MenuItemBuilder.create().text('About').onAction(new EventHandler<ActionEvent>(){@Override public void handle(ActionEvent e){out.println('You clicked on About!');}}).accelerator(new KeyCodeCombination(KeyCode.A, KeyCombination.CONTROL_DOWN)).build();             
helpMenu.getItems().add(aboutMenuItem);
menuBar.getMenus().add(helpMenu);

除了演示MenuItemBuilder ,将按键组合(在这种情况下为CTRL-A)与菜单项相关联,以及将动作与菜单项相关联之外,此代码示例还演示了使用setDisable(boolean)或禁用菜单项(显示为灰色)或使用setVisible(boolean)使其完全不显示。 尽管我可以指定禁用菜单项或使用MenuItemBuilder使菜单项不可见,但在此示例中,我有意在MenuItem上使用了“ set”方法来与使用MenuItemBuilder进行对比。

为了完整起见,这是我的示例的完整代码清单。

JavaFxMenus.java(完整清单)

package dustin.examples;import static java.lang.System.out;import javafx.application.Application;
import javafx.beans.property.ReadOnlyDoubleProperty;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
import javafx.scene.paint.Color;
import javafx.stage.Stage;/*** Example of creating menus in JavaFX.* * @author Dustin*/
public class JavaFxMenus extends Application
{/*** Build menu bar with included menus for this demonstration.* * @param menuWidthProperty Width to be bound to menu bar width.* @return Menu Bar with menus included.*/private MenuBar buildMenuBarWithMenus(final ReadOnlyDoubleProperty menuWidthProperty){final MenuBar menuBar = new MenuBar();// Prepare left-most 'File' drop-down menufinal Menu fileMenu = new Menu('File');fileMenu.getItems().add(new MenuItem('New'));fileMenu.getItems().add(new MenuItem('Open'));fileMenu.getItems().add(new MenuItem('Save'));fileMenu.getItems().add(new MenuItem('Save As'));fileMenu.getItems().add(new SeparatorMenuItem());fileMenu.getItems().add(new MenuItem('Exit'));menuBar.getMenus().add(fileMenu);// Prepare 'Examples' drop-down menufinal Menu examplesMenu = new Menu('JavaFX 2.0 Examples');examplesMenu.getItems().add(new MenuItem('Text Example'));examplesMenu.getItems().add(new MenuItem('Objects Example'));examplesMenu.getItems().add(new MenuItem('Animation Example'));menuBar.getMenus().add(examplesMenu);// Prepare 'Help' drop-down menufinal Menu helpMenu = new Menu('Help');final MenuItem searchMenuItem = new MenuItem('Search');searchMenuItem.setDisable(true);helpMenu.getItems().add(searchMenuItem);final MenuItem onlineManualMenuItem = new MenuItem('Online Manual');onlineManualMenuItem.setVisible(false);helpMenu.getItems().add(onlineManualMenuItem);helpMenu.getItems().add(new SeparatorMenuItem());final MenuItem aboutMenuItem =MenuItemBuilder.create().text('About').onAction(new EventHandler<ActionEvent>(){@Override public void handle(ActionEvent e){out.println('You clicked on About!');}}).accelerator(new KeyCodeCombination(KeyCode.A, KeyCombination.CONTROL_DOWN)).build();             helpMenu.getItems().add(aboutMenuItem);menuBar.getMenus().add(helpMenu);// bind width of menu bar to width of associated stagemenuBar.prefWidthProperty().bind(menuWidthProperty);return menuBar;}/*** Start of JavaFX application demonstrating menu support.* * @param stage Primary stage.*/@Overridepublic void start(final Stage stage){stage.setTitle('Creating Menus with JavaFX 2.0');final Group rootGroup = new Group();final Scene scene = new Scene(rootGroup, 800, 400, Color.WHEAT);final MenuBar menuBar = buildMenuBarWithMenus(stage.widthProperty());rootGroup.getChildren().add(menuBar);stage.setScene(scene);stage.show();}/*** Main executable function for running examples.* * @param arguments Command-line arguments: none expected.*/public static void main(final String[] arguments){Application.launch(arguments);}
}

下一系列屏幕快照将尝试演示使用java启动器执行时该应用程序的外观。 图像显示了应用程序的初始外观,单击了“文件”菜单时显示了下拉菜单,单击了“帮助”菜单时显示了下拉菜单,最后显示了已写消息的图像单击“帮助”菜单下的“关于”菜单项时,输出到标准输出。

本文中示例中的代码具有许多语法功能,Swing开发人员应该对此感到熟悉。 实际上,上面使用的许多JavaFX类的名称与AWT类的名称相同,因此在使用IDE的自动导入建议时,必须小心导入正确的类。

上面的示例还提供了JavaFX绑定的示例。 特别是,菜单栏的宽度绑定到舞台宽度的宽度。 这很有用,因为使菜单栏跨越视觉的整个顶部看起来更好,而不是宽度足以容纳菜单标签看起来更好。

构建菜单在JavaFX 2.0中非常简单,可以使用基本Java工具和JavaFX 2.0 JAR来实现。

祝您编程愉快,别忘了分享!

参考:( 纯Java) JCG合作伙伴 Dustin Marx的JavaFX 2.0菜单,来自Inspired by Actual Events博客。


翻译自: https://www.javacodegeeks.com/2012/09/pure-java-javafx-20-menus.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设置QtreeWidget水平滚动条

转载请注明出处&#xff1a;http://www.cnblogs.com/dachen408/p/7552603.html //设置treewidget水平滚动条 ui.treeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents);ui.treeWidget->header()->setStretchLastSection(false);转载于:https…

java 序列化 uid,Java中的序列化版本uid

How is Serialization id stored in the instance of the object ?The Serialization id we declare in Java is static field;and static fields are not serialized.There should be some way to store the static final field then. How does java do it ?解决方案The ser…

HTML5本地存储

什么是Web Storage Web Storage是HTML5里面引入的一个类似于cookie的本地存储功能&#xff0c;可以用于客户端的本地存储&#xff0c;其相对于cookie来说有以下几点优势&#xff1a; 存储空间大&#xff1a;cookie只有4KB的存储空间&#xff0c;而Web Storage在官方建议中为每个…

番石榴秒表

番石榴的秒表是番石榴第10版的另一个新番石榴类&#xff08;作为Optional &#xff0c;这是另一篇近期文章的主题&#xff09;。 顾名思义&#xff0c;这个简单的类提供了一种方便地测量两个代码点之间经过的时间的方法。 与使用System.currentTimeMillis&#xff08;&#xff…

CF 839 E-最大团

CF 839 E Soltion: 就是怎么求最大团的问题: 以下是\(O(7000\times n^2)\)的做法 求一个最大团,然后将所有的药水平均分配,到最大团的所有点上,计算答案. #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorit…

sse java_SSE详解

SSE(Server-Sent Events):通俗解释起来就是一种基于HTTP的&#xff0c;以流的形式由服务端持续向客户端发送数据的技术应用场景由于HTTP是无状态的传输协议,每次请求需由客户端向服务端建立连接,HTTPS还需要交换秘钥&#xff0c;所以一次请求,建立连接的过程占了很大比例在http…

520. Detect Capital

题目&#xff1a; Given a word, you need to judge whether the usage of capitals in it is right or not. We define the usage of capitals in a word to be right when one of the following cases holds: All letters in this word are capitals, like "USA".A…

盒模型的属性丶display显示丶浮动

一丶盒模型的属性(重要) 1.padding padding是标准文档流,父子之间调整位置 <!DOCTYPE html><html><head><meta charset"UTF-8"><title>padding</title><style>*{padding: 0;margin: 0;}.box{width: 200px;height: 200px;b…

MapReduce:通过数据密集型文本处理

自上次发布以来已经有一段时间了&#xff0c;因为我一直在忙于Coursera提供的一些课程。 有一些非常有趣的产品&#xff0c;值得一看。 前一段时间&#xff0c;我购买了Jimmy Lin和Chris Dyer的MapReduce数据密集型处理程序 。 本书以伪代码格式介绍了几种关键的MapReduce算法。…

ubuntu(deepin)安装apache2并支持php7.0

linux虚拟机下用于开发环境测试&#xff0c;安装的apache和php7.0&#xff0c;但是简单安装完两者后apache并不能解析php&#xff0c;原因是确实apache的php扩展。 # 首先安装apache sudo apt-get install apache2 # 然后安装php7.0 sudo apt-get install php7.0 # 一般执行完这…

java applet 换行_Java复习题

一、选择题1.有Java语句如下&#xff0c;则说法正确的是()A.此语句是错误的B. a.length的值为5C. b.length的值为5D. a.length和b.length的值都为52.整数除法中&#xff0c;如果除数为0&#xff0c;则将导致的异常是( B )A. NullPointerExceptionB. ArithmeticExceptionC. Arra…

解决:MVC对象转json包含\r \n

项目中对象转json字符串时&#xff0c;如下&#xff1a;JsonSerializerSettings jsetting new JsonSerializerSettings(); jsetting.DefaultValueHandling DefaultValueHandling.Ignore; return JsonConvert.SerializeObject(resultMoldels, Formatting.Indented, jsetting);…

CSS 小结笔记之滑动门技术

所谓的滑动门技术&#xff0c;就是指盒子背景能够自动拉伸以适应不同长度的文本。即当文字增多时&#xff0c;背景看起来也会变长。 大多数应用于导航栏之中&#xff0c;如微信导航栏: 具体实现方法如下&#xff1a; 1、首先每一块文本内容是由a标签与span标签组成 <a hr…

使用API​​身份验证的Spring Security

背景 尽管有许多博客文章详细介绍了如何使用Spring Security&#xff0c;但是当问题域位于标准LDAP或数据库身份验证之外时&#xff0c;我仍然经常发现配置挑战。 在本文中&#xff0c;我将介绍一些针对Spring Security的简单自定义&#xff0c;使其能够与基于REST的API调用一起…

java nlpir_4-NLPIR汉语分词系统-JAVA

好吧&#xff0c;之前用的是旧版的&#xff0c;现在出了个新版的&#xff0c;优先选择用新版的哈。从官网下载相应的开发包&#xff0c;然后主要需要找到这几个东西添加到项目工程里面&#xff0c;1.Data文件夹 2.NLPIR_JNI.DLL 3.NLPIR.jar 4.nlpir.properties添加完那些东西后…

浅析C语言中assert的用法(转)

原文地址&#xff1a;http://www.jb51.net/article/39685.htm 以下是对C语言中assert的使用方法进行了介绍&#xff0c;需要的朋友可以参考下。 assert宏的原型定义在<assert.h>中&#xff0c;其作用是如果它的条件返回错误&#xff0c;则终止程序执行&#xff0c;原型定…

hihocoder offer收割编程练习赛12 D 寻找最大值

思路&#xff1a; 可能数据太水了&#xff0c;随便乱搞就过了。 实现&#xff1a; 1 #include <iostream>2 #include <cstdio>3 #include <algorithm>4 using namespace std;5 typedef long long ll;6 7 int a[100005], n;8 9 int main() 10 { 11 int t;…

vue error:The template root requires exactly one element.

error:[vue/valid-template-root] The template root requires exactly one element. 原因&#xff1a; 因为vue的模版中只有能一个根节点&#xff0c;所以在<template>中插入第二个元素就会报错 解决方案&#xff1a; 将<template>中的元素先用一个<div>…

测试驱动陷阱,第2部分

单元测试中单元的故事 在本文的上半部分 &#xff0c;您可能会看到一些不好但很流行的测试示例。 但是我不是一个专业评论家&#xff08;也被称为“巨魔”或“仇恨者”&#xff09;&#xff0c;没有任何建设性的话就抱怨。 多年的TDD教给我的不仅仅是事情会变得多么糟糕。 有许…

java 代码 设置环境变量_Java 配置环境变量教程

【声明】欢迎转载&#xff0c;但请保留文章原始出处→_→【正文】1、安装JDK开发环境开始安装JDK&#xff1a;修改安装目录如下&#xff1a;确定之后&#xff0c;单击“下一步”。注&#xff1a;当提示安装JRE时&#xff0c;可以选择不要安装。2、配置环境变量&#xff1a;对于…