純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.pswp.cn/news/371182.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371182.shtml
英文地址,請注明出處:http://en.pswp.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;對于…