JavaFX+Jfoenix 学习笔记(四)–MenuBar菜单栏

JavaFX+Jfoenix 学习笔记(四)–MenuBar菜单栏1、菜单栏,如图2、实例-1,最简单且简陋的菜单栏packagezkh.javafx.learn.menubar;importjavafx.application.Application;importjavafx.geometry.Pos;importjavafx.scene.Scene;importjavafx.scene.control.Label;i…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

1、菜单栏,如图

JavaFX+Jfoenix 学习笔记(四)--MenuBar菜单栏

 

2、实例-1,最简单且简陋的菜单栏

package zkh.javafx.learn.menubar;

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage;

/**
 * MenuBar
 */
// 继承javafx.application.Application是JavaFX的开始
public class MenuBar1 extends Application {
	
	/**
	 * Stage:就是你能看到的整个软件界面(窗口)
	 * Scene:就是除了窗口最上面有最大、最小化及关闭按钮那一行及窗口边框外其它的区域(场景)
	 * 场景(Scene)是一个窗口(Stage)必不可少的
	 */
	@Override
	public void start(Stage stage) throws Exception {
		// 创建一个标签,用于存放我们的Hello World文本,并设置让它在父容器中居中
		Label label = new Label("Hello"); label.setAlignment(Pos.CENTER);
		
		// 总共分两步:1:创建菜单栏(MenuBar);2:给菜单栏添加菜单项(MenuItem)
		// 创建一个菜单栏
		MenuBar menuBar = new MenuBar();
		
		// 创建菜单
		Menu menu1 = new Menu("菜单1");
		Menu menu2 = new Menu("菜单2");
		
		// 创建多级菜单的父级
		Menu menu3 = new Menu("多级菜单");
		MenuItem menuItem1 = new MenuItem("子菜单项1");
		MenuItem menuItem2 = new MenuItem("子菜单项1");
		MenuItem menuItem3 = new MenuItem("子菜单项1");
		// 将子菜单项添加进父级菜单
		menu3.getItems().addAll(menuItem1, menuItem2, menuItem3);
		
		// 将菜单添加进菜单栏
		menuBar.getMenus().addAll(menu1, menu2, menu3);
		
		// 1、初始化一个场景
		Scene scene = new Scene(menuBar, 400, 300);
		// 2、将场景放入窗口
		stage.setScene(scene);
		// 3、打开窗口
		stage.show();
	}
	
	public static void main( String[] args ){
		// 启动软件
		Application.launch(args);
    }
    
}

Jetbrains全家桶1年46,售后保障稳定

效果图:

JavaFX+Jfoenix 学习笔记(四)--MenuBar菜单栏

3、实例-2:菜单栏美化

package zkh.javafx.learn.menubar;

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.control.ScrollPane;
import javafx.scene.image.Image;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import zkh.javafx.util.Constants;

/**
 * MenuBar
 */
// 继承javafx.application.Application是JavaFX的开始
public class MenuBar2 extends Application {
	
	/**
	 * Stage:就是你能看到的整个软件界面(窗口)
	 * Scene:就是除了窗口最上面有最大、最小化及关闭按钮那一行及窗口边框外其它的区域(场景)
	 * 场景(Scene)是一个窗口(Stage)必不可少的
	 */
	@Override
	public void start(Stage stage) throws Exception {
		// (如果需要的话)定位横纵坐标,避免太靠边上遮盖菜单栏,,这两行如果不屑,一般电脑默认是居中屏幕显示,但在有些电脑会跑偏
        // stage.setX(0);stage.setY(4);
        // stage和Scene不再注释
  	    stage.setTitle(Constants.TITLE);
  	    stage.getIcons().add(new Image(Constants.IMG + "icon.png"));
		
  	   
  	    // 使用BorderPane布局
  	    BorderPane borderPane = new BorderPane();
  	    
		// 创建一个菜单栏
		MenuBar menuBar = new MenuBar();
		menuBar.getStyleClass().add("zkh_MenuBar");
		
		// 创建菜单
		Menu menu1 = new Menu("菜单1");
		Menu menu2 = new Menu("菜单2");
		
		// 创建多级菜单的父级
		Menu menu3 = new Menu("多级菜单");
		MenuItem menuItem1 = new MenuItem("子菜单项1");
		menuItem1.getStyleClass().add("zkh_MenuItem");
		MenuItem menuItem2 = new MenuItem("子菜单项2");
		menuItem2.getStyleClass().add("zkh_MenuItem");
		MenuItem menuItem3 = new MenuItem("子菜单项3");
		menuItem3.getStyleClass().add("zkh_MenuItem");
		// 将子菜单项添加进父级菜单
		menu3.getItems().addAll(menuItem1, menuItem2, menuItem3);
		
		// 将菜单添加进菜单栏
		menuBar.getMenus().addAll(menu1, menu2, menu3);
		
		borderPane.setTop(menuBar);
		borderPane.setCenter(new ScrollPane());
		
		
		// 1、初始化一个场景
		Scene scene = new Scene(borderPane, 400, 300);
		// 样式文件最好在Scene中引入,这样其他子组件就都可以使用了(哲理注意替换斜杠\,不能会报错找不到路径)
	    scene.getStylesheets().add((Constants.CSS + "app.css").replace("\\", "/"));
		// 2、将场景放入窗口
		stage.setScene(scene);
		// 3、打开窗口
		stage.show();
	}
	
	public static void main( String[] args ){
		// 启动软件
		Application.launch(args);
    }
    
}

css代码

只有前两行是自定义代码,其它都是重写原始样式

/*顶部菜单栏*/
.zkh_MenuBar{
    -fx-background-color:#F0F0F0;
    -fx-border:none;
    -fx-padding:0;
    -fx-font-size:12;
}
.zkh_MenuItem{
	-fx-padding: 8 60 8 30;
	-fx-font-size:12;
	-fx-cursor:hand;
}
.context-menu{
	-fx-padding:2;
	-fx-border-width:0;
	-fx-background-color:rgb(242,242,242,0.96); /*0.87*/
	/*-fx-background-radius:2px;*/
	/*-fx-effect:dropshadow(three-pass-box, #F2F2F2, 1, 0, 0, 0);*/ /*阴影效果*/
}
.menu-bar > .container > .menu-button:showing{ /*菜单栏选中并移动到二级菜单时一级选中菜单的样式*/
    -fx-background-color:#CCCCCE;
    -fx-border-color:#CCCCCE;
}
.menu-button{
	-fx-padding:1 4 1 4;
	-fx-border-width:1;
	-fx-border-color:#F0F0F0;
}
.menu-button:hover{
	-fx-background-color:#CCCCCE;
	-fx-border-color:#CCCCCE;
}
.menu-button > .label,.menu-item > .label{
	-fx-text-fill:BLACK;
}
.menu-item:focused{
	-fx-background-color:#CCCCCE; /*#90C8F6*/
}
.menu:focused > .right-container > .arrow{
    -fx-background-color:#CCCCCE;
}

效果图:

JavaFX+Jfoenix 学习笔记(四)--MenuBar菜单栏

4、实例-3:菜单的单击事件

菜单最基本的作用就是单击做一些事情这是要用到单击事件:setOnAction(EventHandler<ActionEvent> value)

这里有个坑,Menu的setOnAction不生效,或者说Menu的不能作为一个菜单按钮来使用,所以我都是用MenuItem

package zkh.javafx.learn.menubar;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.ScrollPane;
import javafx.scene.image.Image;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import zkh.javafx.util.Constants;

/**
 * MenuBar
 */
// 继承javafx.application.Application是JavaFX的开始
public class MenuBar3 extends Application {
	
	/**
	 * Stage:就是你能看到的整个软件界面(窗口)
	 * Scene:就是除了窗口最上面有最大、最小化及关闭按钮那一行及窗口边框外其它的区域(场景)
	 * 场景(Scene)是一个窗口(Stage)必不可少的
	 */
	@Override
	public void start(Stage stage) throws Exception {
		// (如果需要的话)定位横纵坐标,避免太靠边上遮盖菜单栏,,这两行如果不屑,一般电脑默认是居中屏幕显示,但在有些电脑会跑偏
        // stage.setX(0);stage.setY(4);
        // stage和Scene不再注释
  	    stage.setTitle(Constants.TITLE);
  	    stage.getIcons().add(new Image(Constants.IMG + "icon.png"));
		
  	   
  	    // 使用BorderPane布局
  	    BorderPane borderPane = new BorderPane();
  	    
		// 创建一个菜单栏
		MenuBar menuBar = new MenuBar();
		menuBar.getStyleClass().add("zkh_MenuBar");
		
		// 创建菜单
		Menu menu1 = new Menu("菜单1");
		Menu menu2 = new Menu("菜单2");
		
		// 创建多级菜单的父级
		Menu menu3 = new Menu("多级菜单");
		MenuItem menuItem1 = new MenuItem("子菜单项1");
		menuItem1.getStyleClass().add("zkh_MenuItem");
		MenuItem menuItem2 = new MenuItem("子菜单项2");
		menuItem2.getStyleClass().add("zkh_MenuItem");
		MenuItem menuItem3 = new MenuItem("子菜单项3");
		menuItem3.getStyleClass().add("zkh_MenuItem");
		MenuItem menuItem4 = new MenuItem("单击弹出1");
		menuItem4.getStyleClass().add("zkh_MenuItem");
		// 这里有个坑,Menu的setOnAction不生效,或者说Maneu的不能作为一个菜单按钮来使用,所以我都是用MenuItem
		menuItem4.setOnAction(
				new EventHandler<ActionEvent>() {
		            public void handle(ActionEvent event) {
		            	// 这个自己看,用处不大
		            	Alert alert = new Alert(Alert.AlertType.INFORMATION);
		            	alert.setContentText("弹出的那个1");
		            	alert.showAndWait();
		            }
		        }
		);
		// 将子菜单项添加进父级菜单
		menu3.getItems().addAll(menuItem1, menuItem2, menuItem3, menuItem4);
		
		// 将菜单添加进菜单栏
		menuBar.getMenus().addAll(menu1, menu2, menu3);
		
		borderPane.setTop(menuBar);
		borderPane.setCenter(new ScrollPane());
		
		
		// 1、初始化一个场景
		Scene scene = new Scene(borderPane, 400, 300);
		// 样式文件最好在Scene中引入,这样其他子组件就都可以使用了(哲理注意替换斜杠\,不能会报错找不到路径)
	    scene.getStylesheets().add((Constants.CSS + "app.css").replace("\\", "/"));
		// 2、将场景放入窗口
		stage.setScene(scene);
		// 3、打开窗口
		stage.show();
	}
	
	public static void main( String[] args ){
		// 启动软件
		Application.launch(args);
    }
    
}

效果动图:

JavaFX+Jfoenix 学习笔记(四)--MenuBar菜单栏

5、源代码(不推荐,文章基本都有了)

JavaFX+Jfoenix 学习笔记(四)–MenuBar菜单栏源码

好了,多看注释!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222947.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网页文字不可以复制_html5实现复制粘贴

    网页文字不可以复制_html5实现复制粘贴大家在上网的时候是否曾经遇到过网页文字无法复制的情况呢?为什么网页文字无法复制呢?或者问如何把不能复制的网页文字复制下来呢?其实,网页文字不能复制原因大部分是网页的制作者为了防止网页内容被被人盗用而设置了复制限制,在网页中嵌入了Javascript语言,通过编程的手段屏蔽了复制功能。下面小编给大家分享下如何把被限制复制的网页文字复制下来。本方法以IE浏览器为例子,打开IE浏览器链接到需要访问的网页…

    2022年10月13日
  • map集合遍历的三种方式(map遍历的两种方式)

    Map集合的遍历与List和Set集合不同。Map有两组值,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历。Map以及实现Map的接口类(如HashMap、TreeMap、LinkedHashMap、Hashtable等)都可以用以下几种方式遍历。1)在for循环中使用entries实现Map的遍历(最常见和最常用的)。publicstati…

    2022年4月17日
  • inception v3网络_Netmarble

    inception v3网络_Netmarble本文叙述了CNN历史以来的发展模型,介绍了发展流程以及发展路线,并对比了各种Inception模型区别,详细介绍了Inceptionv3模型,读者可以轻松了解到Inception模型的发展情况。

    2022年8月14日
  • 2017年最新(4月20日)手机号码归属地数据库分享

    2017年最新(4月20日)手机号码归属地数据库分享2017年最新(4月20日)手机号码归属地数据库下载手机号段数据库号码归属地数据库移动号段联通号段电信号段147号段170号段(虚拟运营商)权威全面准确规范字段包括省份城市运营商邮编区号等信息,对于数据分析、号码归属地查询等非常有帮助更新历史:2017年4月最新版手机号段归属地,也叫手机归属地数据库共360569条记录…

    2022年7月22日
  • Altium Designer 18 速成实战 第五部分 PCB流程化设计常用操作(二十一)Net及Net Class的颜色管理

    Altium Designer 18 速成实战 第五部分 PCB流程化设计常用操作(二十一)Net及Net Class的颜色管理AltiumDesigner18速成实战第五部分PCB流程化设计常用操作(二十一)Net及NetClass的颜色管理目录一、单个网络变颜色:二、整组改变颜色:一、单个网络变颜色:二、整组改变颜色:…

    2022年7月16日
  • Enterprise Library简介

    Enterprise Library简介EnterpriseLibraryfor.NetFramework3.5–EntLibv4.1是patterns&amp;practices小组为.NETFramework3.5开发一套企业库,目前最新版本为v4.1,共包括9个ApplicationBlock,包括数据访问(DataAccessApplicationBlock)、异常管理(Exception…

    2022年10月20日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号