菜单(Menu)和菜单栏(MenuBar),添加菜单项(MenuItem),将菜单分组,创建子菜单(Submenu),以及设置上下文菜单(ContextMenu)
其中ContextMenu组件是为了节省空间而设计的,它是一个弹出框式的菜单组件
你可以使用下面这些JavaFX API中的类来在你的应用程序中构建菜单
· MenuBar
· MenuItem
· Menu
————————————————————
· CheckMenuItem
· RadioMenuItem
· Menu
——————————————————
· CustomMenuItem
· SeparatorMenuItem
· ContextMenu
————————————————————
一个包含典型菜单栏的应用程序
包含菜单栏和三个菜单分类的应用程序
(菜单的作用:
在JavaFX应用程序中构建菜单
一个菜单Menu是一系列根据需要进行显示的可响应事件的菜单项MenuItem所组合成的一个附合组件。当一个菜单Menu可见时,用户一次可以选择一个菜单项MenuItem。当用户点击一个菜单项MenuItem后,菜单就会回到隐藏模式。通过使用菜单,你将一些不需要始终显示的功能放在其中,这样可以节省你的应用程序UI空间
)
当在你的JavaFX应用程序中构建菜单时,使用下面的菜单项类。
· MenuItem – 创建一个可响应事件的选项
· Menu – 创建一个子菜单
· RadioButtonItem – 创建一个相互排斥的选项
· CheckMenuItem – 创建一个可在选中和非选中状态切换的选项
在一个分类中对菜单项进行分隔,使用SeparatorMenuItem类
菜单一般位于窗口的上方,scene中其余的空间留给那些重要的控件。基于某种原因,如果你不想在你的UI中为菜单栏分配任何可见空间,你可以使用上下文菜单,它通过用户点击鼠标打开
创建菜单栏
尽管菜单栏可以被放置在UI的任何其他地方,但是菜单栏一般是位于UI的上方,而且它包含一个或者多个菜单。菜单栏会自动伸缩以适用应用程序窗口的宽度。默认情况下,每个添加到菜单栏的菜单是由带有文本的按钮表示的
创建一个简单只有Menu菜单 无选项 的窗口例子
import java.util.AbstractMap.SimpleEntry;
import java.util.Map.Entry;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.effect.DropShadow;
import javafx.scene.effect.Effect;
import javafx.scene.effect.Glow;
import javafx.scene.effect.SepiaTone;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class MenuSample extends Application {
final PageData[] pages = new PageData[] {
new PageData("标题一",
"描述一",
"名称一"),
new PageData("标题二",
"描述二",
"名称二"),
new PageData("标题三",
"描述三",
"名称三"),
new PageData("标题",
"描述",
"名称")
};
final String[] viewOptions = new String[] {
"标题",
"二项式",
"图片",
"描述"
};
final Entry<String, Effect>[] effects = new Entry[] {//Entry类型数组对象的初始化
new SimpleEntry<>("Sepia Tone", new SepiaTone()),//创建一个深褐色特效
new SimpleEntry<>("Glow", new Glow()),//创建一个发光特效
new SimpleEntry<>("Shadow", new DropShadow())//创建一个阴影特效
};
final ImageView pic = new ImageView();//创建一个图形视图展示区域对象
final Label name = new Label();//创建一个label对象
final Label binName = new Label();//创建一个label对象
final Label description = new Label();//创建一个label对象
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
stage.setTitle("Menu例子");
Scene scene = new Scene(new VBox(), 400, 350);//创建一个场景对象,并将场景上挂载一个垂直盒子Vbox布局对象
MenuBar menuBar = new MenuBar();//创建一个MenuBar类型对象
// --- Menu File
Menu menuFile = new Menu("Menu菜单一");
// --- Menu Edit
Menu menuEdit = new Menu("Menu菜单二");
// --- Menu View
Menu menuView = new Menu("Menu菜单三");
//将上文创建的三个Menu对象添加(镶嵌)到MenuBar对象上去
menuBar.getMenus().addAll(menuFile, menuEdit, menuView);//Menu类型对象都是要镶嵌在MenuBar对象上的
((VBox) scene.getRoot()).getChildren().addAll(menuBar);//从场景对象scene对象上获取Vbox类型布局对象,并将前文定义的MenuBar类型对象添加到Vbox布局对象上去
stage.setScene(scene);//舞台上添加场景
stage.show();//舞台show
}
private class PageData {//自定义的类似于pojo类型
public String name;
public String description;
public String binNames;
public Image image;
public PageData(String name, String description, String binNames) {
this.name = name;
this.description = description;
this.binNames = binNames;
image = new Image(getClass().getResourceAsStream("folder_16.jpg"));//创建并加载一个图片对象
}
}
}
与其他UI控件不一样,Menu类和其他MenuItem的扩展类不是继承自Node类。他们不能直接添加到应用程序scene中,必须通过 MenuBar(菜单栏)的 getMenus().addAll 的 方法方法添加到菜单栏MenuBar类型对象上(镶嵌到MenuBar类型组件上)时才可见
——————————————————————————————
给菜单Menu类型对象上添加(镶嵌)菜单项MenuItem类型对象
添加菜单项
import java.util.AbstractMap.SimpleEntry; import java.util.Map.Entry; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.effect.DropShadow; import javafx.scene.effect.Effect; import javafx.scene.effect.Glow; import javafx.scene.effect.SepiaTone; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.text.Font; import javafx.scene.text.TextAlignment; import javafx.stage.Stage; public class MenuTest extends Application { final PageData[] pages = new PageData[] { new PageData("标题一", "描述一", "名称一"), new PageData("标题二", "描述二", "名称二"), new PageData("标题三", "描述三", "名称三"), new PageData("标题", "描述", "名称") }; final String[] viewOptions = new String[] { "标题", "二项式", "图片", "描述" }; final Entry<String, Effect>[] effects = new Entry[] {//Entry类型数组对象的初始化 new SimpleEntry<>("Sepia Tone", new SepiaTone()),//创建一个深褐色特效 new SimpleEntry<>("Glow", new Glow()),//创建一个发光特效 new SimpleEntry<>("Shadow", new DropShadow())//创建一个阴影特效 }; final ImageView pic = new ImageView();//创建视图显示区域 final Label name = new Label();//创建标签对象 final Label binName = new Label();//创建标签对象 final Label description = new Label();//创建标签对象 private int currentIndex = -1;//当前下标值的初始化设置 public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) { stage.setTitle("Menu例子"); Scene scene = new Scene(new VBox(), 400, 350);//设置场景宽度和高度 scene.setFill(Color.DARKBLUE);//场景填充颜色 name.setFont(new Font("Verdana Bold", 22));//设置标签字体 binName.setFont(new Font("Arial Italic", 10));//设置标签字体 pic.setFitHeight(150);//图片设置固定高度 pic.setPreserveRatio(true);//图片设置保留比例 description.setWrapText(true);//标签文字包围特效设置 description.setTextAlignment(TextAlignment.JUSTIFY);//设置label标签的对齐方式 shuffle();//清晰复原程序 MenuBar menuBar = new MenuBar();//创建一个MenuBar对象,以后Menu类型对象需要镶嵌到这个MenuBar对象的上面 final VBox vbox = new VBox();//创建一个垂直布局对象 vbox.setAlignment(Pos.CENTER);//设置vbox对象对齐方式 vbox.setSpacing(10);//设置vbox对象布局的元素之间的空间距离 vbox.setPadding(new Insets(0, 10, 0, 10));//设置Vbox对象内边距 vbox.getChildren().addAll(name, binName, pic, description);//vbox布局器中要添加的被布局元素对象(用vbox对象布局相关Node类型Label标签型对象) // --- Menu File Menu menuFile = new Menu("菜单一"); MenuItem add = new MenuItem("重置功能", new ImageView(new Image("https://profile.csdnimg.cn/B/F/8/3_zy103118")));//创建一个MenuItem类型对象其背景设置为一个图片 add.setOnAction((ActionEvent t) -> {//MenuItem类型对象添加点击事件处理程序回调函数 shuffle(); vbox.setVisible(true); }); menuFile.getItems().addAll(add);//Menu菜单类型对象添加MenuItem类型选项对象 // --- Menu Edit Menu menuEdit = new Menu("菜单二"); // --- Menu View Menu menuView = new Menu("菜单三"); menuBar.getMenus().addAll(menuFile, menuEdit, menuView);//将上述定义的Menu对象镶嵌进MenuBar类型对象中 ((VBox) scene.getRoot()).getChildren().addAll(menuBar, vbox);//scene对象的根节点元素上添加上文定义的menuBar对象和vbox对象 stage.setScene(scene);//舞台设置场景 stage.show();//舞台展现 } private void shuffle() {//洗牌程序(清晰复原程序) int i = currentIndex; while (i == currentIndex) { i = (int) (Math.random() * pages.length); } pic.setImage(pages[i].image);//图片视图区域价值图片 name.setText(pages[i].name);//label添加文字 binName.setText("(" + pages[i].binNames + ")");//label添加文字 description.setText(pages[i].description);//label对象添加文字 currentIndex = i; } private class PageData {//类似于pojo这么个domain型业务领域对象 public String name; public String description; public String binNames; public Image image; public PageData(String name, String description, String binNames) { this.name = name; this.description = description; this.binNames = binNames; image = new Image(getClass().getResourceAsStream("department.png")); } } }
import java.util.AbstractMap.SimpleEntry;
import java.util.Map.Entry;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.effect.DropShadow;
import javafx.scene.effect.Effect;
import javafx.scene.effect.Glow;
import javafx.scene.effect.SepiaTone;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCombination;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.TextAlignment;
import javafx.stage.Stage;
public class MenuTest extends Application {
final PageData[] pages = new PageData[] {
new PageData("标题一",
"描述一",
"名称一"),
new PageData("标题二",
"描述二",
"名称二"),
new PageData("标题三",
"描述三",
"名称三"),
new PageData("标题",
"描述",
"名称")
};
final String[] viewOptions = new String[] {
"标题",
"二项式",
"图片",
"描述"
};
final Entry<String, Effect>[] effects = new Entry[] {//Entry类型数组对象的初始化
new SimpleEntry<>("Sepia Tone", new SepiaTone()),//创建一个深褐色特效
new SimpleEntry<>("Glow", new Glow()),//创建一个发光特效
new SimpleEntry<>("Shadow", new DropShadow())//创建一个阴影特效
};
final ImageView pic = new ImageView();//创建视图显示区域
final Label name = new Label();//创建标签对象
final Label binName = new Label();//创建标签对象
final Label description = new Label();//创建标签对象
private int currentIndex = -1;//当前下标值的初始化设置
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
stage.setTitle("Menu例子");
Scene scene = new Scene(new VBox(), 400, 350);//设置场景宽度和高度
scene.setFill(Color.DARKBLUE);//场景填充颜色
name.setFont(new Font("Verdana Bold", 22));//设置标签字体
binName.setFont(new Font("Arial Italic", 10));//设置标签字体
pic.setFitHeight(150);//图片设置固定高度
pic.setPreserveRatio(true);//图片设置保留比例
description.setWrapText(true);//标签文字包围特效设置
description.setTextAlignment(TextAlignment.JUSTIFY);//设置label标签的对齐方式
shuffle();//清晰复原程序
MenuBar menuBar = new MenuBar();//创建一个MenuBar对象,以后Menu类型对象需要镶嵌到这个MenuBar对象的上面
final VBox vbox = new VBox();//创建一个垂直布局对象
vbox.setAlignment(Pos.CENTER);//设置vbox对象对齐方式
vbox.setSpacing(10);//设置vbox对象布局的元素之间的空间距离
vbox.setPadding(new Insets(0, 10, 0, 10));//设置Vbox对象内边距
vbox.getChildren().addAll(name, binName, pic, description);//vbox布局器中要添加的被布局元素对象(用vbox对象布局相关Node类型Label标签型对象)
// --- Menu File
Menu menuFile = new Menu("菜单一");
MenuItem add = new MenuItem("重置功能",
new ImageView(new Image("https://profile.csdnimg.cn/B/F/8/3_zy103118")));//创建一个MenuItem类型对象其背景设置为一个图片
add.setOnAction((ActionEvent t) -> {//MenuItem类型对象添加点击事件处理程序回调函数
shuffle();
vbox.setVisible(true);
});
MenuItem clear = new MenuItem("清除内容");//创建一个MenuItem选项组件
clear.setAccelerator(KeyCombination.keyCombination("Ctrl+E"));//Accelerator加速器引申意义为快捷方式:将名为clear的MenuItem对象的访问快捷方式设置为Ctrl+E组合键
clear.setOnAction((ActionEvent t) -> {//设置名称为clear的MenuItem对象的交互事件处理回调函数
vbox.setVisible(false);//设置vbox对象的可见性为Visible为false,则vbox对象就不可见了
});
menuFile.getItems().addAll(add);//Menu菜单类型对象添加MenuItem类型选项对象
// --- Menu Edit
Menu menuEdit = new Menu("菜单二");//菜单对象的建立
menuEdit.getItems().add(clear);//给菜单二对象上添加MenuItem对象clear
// --- Menu View
Menu menuView = new Menu("菜单三");//创建菜单对象菜单三
menuBar.getMenus().addAll(menuFile, menuEdit, menuView);//将上述定义的Menu对象镶嵌进MenuBar类型对象中
((VBox) scene.getRoot()).getChildren().addAll(menuBar, vbox);//scene对象的根节点元素上添加上文定义的menuBar对象和vbox对象
stage.setScene(scene);//舞台设置场景
stage.show();//舞台展现
}
private void shuffle() {//洗牌程序(清晰复原程序)
int i = currentIndex;
while (i == currentIndex) {
i = (int) (Math.random() * pages.length);
}
pic.setImage(pages[i].image);//图片视图区域价值图片
name.setText(pages[i].name);//label添加文字
binName.setText("(" + pages[i].binNames + ")");//label添加文字
description.setText(pages[i].description);//label对象添加文字
currentIndex = i;
}
private class PageData {//类似于pojo这么个domain型业务领域对象
public String name;
public String description;
public String binNames;
public Image image;
public PageData(String name, String description, String binNames) {
this.name = name;
this.description = description;
this.binNames = binNames;
image = new Image(getClass().getResourceAsStream("department.png"));
}
}
}
MenuItem类的实现允许开发者设置一个菜单快捷键,这是一个组合键,能够执行和点击菜单项一样的动作。对于Clear菜单项,用户可以从菜单中选择动作,也可以同时按下Ctrl和E键。
Exit菜单关闭应用程序窗口。该菜单项设置System.exit(0)响应动作
创建Exit菜单项
import java.util.AbstractMap.SimpleEntry;
import java.util.Map.Entry;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.effect.DropShadow;
import javafx.scene.effect.Effect;
import javafx.scene.effect.Glow;
import javafx.scene.effect.SepiaTone;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCombination;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.TextAlignment;
import javafx.stage.Stage;
public class MenuTest extends Application {
final PageData[] pages = new PageData[] {
new PageData("标题一",
"描述一",
"名称一"),
new PageData("标题二",
"描述二",
"名称二"),
new PageData("标题三",
"描述三",
"名称三"),
new PageData("标题",
"描述",
"名称")
};
final String[] viewOptions = new String[] {
"标题",
"二项式",
"图片",
"描述"
};
final Entry<String, Effect>[] effects = new Entry[] {//Entry类型数组对象的初始化
new SimpleEntry<>("Sepia Tone", new SepiaTone()),//创建一个深褐色特效
new SimpleEntry<>("Glow", new Glow()),//创建一个发光特效
new SimpleEntry<>("Shadow", new DropShadow())//创建一个阴影特效
};
final ImageView pic = new ImageView();//创建视图显示区域
final Label name = new Label();//创建标签对象
final Label binName = new Label();//创建标签对象
final Label description = new Label();//创建标签对象
private int currentIndex = -1;//当前下标值的初始化设置
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
stage.setTitle("Menu例子");
Scene scene = new Scene(new VBox(), 400, 350);//设置场景宽度和高度
scene.setFill(Color.DARKBLUE);//场景填充颜色
name.setFont(new Font("Verdana Bold", 22));//设置标签字体
binName.setFont(new Font("Arial Italic", 10));//设置标签字体
pic.setFitHeight(150);//图片设置固定高度
pic.setPreserveRatio(true);//图片设置保留比例
description.setWrapText(true);//标签文字包围特效设置
description.setTextAlignment(TextAlignment.JUSTIFY);//设置label标签的对齐方式
shuffle();//清晰复原程序
MenuBar menuBar = new MenuBar();//创建一个MenuBar对象,以后Menu类型对象需要镶嵌到这个MenuBar对象的上面
final VBox vbox = new VBox();//创建一个垂直布局对象
vbox.setAlignment(Pos.CENTER);//设置vbox对象对齐方式
vbox.setSpacing(10);//设置vbox对象布局的元素之间的空间距离
vbox.setPadding(new Insets(0, 10, 0, 10));//设置Vbox对象内边距
vbox.getChildren().addAll(name, binName, pic, description);//vbox布局器中要添加的被布局元素对象(用vbox对象布局相关Node类型Label标签型对象)
// --- Menu File
Menu menuFile = new Menu("菜单一");
MenuItem add = new MenuItem("切换内容",
new ImageView(new Image("https://profile.csdnimg.cn/B/F/8/3_zy103118")));//创建一个MenuItem类型对象其背景设置为一个图片
add.setOnAction((ActionEvent t) -> {//MenuItem类型对象添加点击事件处理程序回调函数
shuffle();
vbox.setVisible(true);
});
MenuItem clear = new MenuItem("清除内容");//创建一个MenuItem选项组件
clear.setAccelerator(KeyCombination.keyCombination("Ctrl+E"));//Accelerator加速器引申意义为快捷方式:将名为clear的MenuItem对象的访问快捷方式设置为Ctrl+E组合键
clear.setOnAction((ActionEvent t) -> {//设置名称为clear的MenuItem对象的交互事件处理回调函数
vbox.setVisible(false);//设置vbox对象的可见性为Visible为false,则vbox对象就不可见了
});
MenuItem exit = new MenuItem("Exit");
exit.setOnAction((ActionEvent t) -> {
System.exit(0);
});
menuFile.getItems().addAll(add);//Menu菜单类型对象添加MenuItem类型选项对象
// --- Menu Edit
Menu menuEdit = new Menu("菜单二");//菜单对象的建立
menuEdit.getItems().add(clear);//给菜单二对象上添加MenuItem对象clear
// --- Menu View
Menu menuExit = new Menu("退出菜单");//创建菜单对象菜单三
menuExit.getItems().add(exit);
menuBar.getMenus().addAll(menuFile, menuEdit, menuExit);//将上述定义的Menu对象镶嵌进MenuBar类型对象中
((VBox) scene.getRoot()).getChildren().addAll(menuBar, vbox);//scene对象的根节点元素上添加上文定义的menuBar对象和vbox对象
stage.setScene(scene);//舞台设置场景
stage.show();//舞台展现
}
private void shuffle() {//洗牌程序(清晰复原程序)
int i = currentIndex;
while (i == currentIndex) {
i = (int) (Math.random() * pages.length);
}
pic.setImage(pages[i].image);//图片视图区域价值图片
name.setText(pages[i].name);//label添加文字
binName.setText("(" + pages[i].binNames + ")");//label添加文字
description.setText(pages[i].description);//label对象添加文字
currentIndex = i;
}
private class PageData {//类似于pojo这么个domain型业务领域对象
public String name;
public String description;
public String binNames;
public Image image;
public PageData(String name, String description, String binNames) {
this.name = name;
this.description = description;
this.binNames = binNames;
image = new Image(getClass().getResourceAsStream("department.png"));
}
}
}
————————————————————————
你可以创建一个分隔菜单项,并通过getItems()方法将其添加进去,以将Exit菜单隔离开
添加菜单项
menuFile.getItems().addAll(add,new SeparatorMenuItem(), exit);//Menu菜单类型对象添加MenuItem类型选项对象
import java.util.AbstractMap.SimpleEntry;
import java.util.Map.Entry;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.effect.DropShadow;
import javafx.scene.effect.Effect;
import javafx.scene.effect.Glow;
import javafx.scene.effect.SepiaTone;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCombination;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.TextAlignment;
import javafx.stage.Stage;
public class MenuTest extends Application {
final PageData[] pages = new PageData[] {
new PageData("标题一",
"描述一",
"名称一"),
new PageData("标题二",
"描述二",
"名称二"),
new PageData("标题三",
"描述三",
"名称三"),
new PageData("标题",
"描述",
"名称")
};
final String[] viewOptions = new String[] {
"标题",
"二项式",
"图片",
"描述"
};
final Entry<String, Effect>[] effects = new Entry[] {//Entry类型数组对象的初始化
new SimpleEntry<>("Sepia Tone", new SepiaTone()),//创建一个深褐色特效
new SimpleEntry<>("Glow", new Glow()),//创建一个发光特效
new SimpleEntry<>("Shadow", new DropShadow())//创建一个阴影特效
};
final ImageView pic = new ImageView();//创建视图显示区域
final Label name = new Label();//创建标签对象
final Label binName = new Label();//创建标签对象
final Label description = new Label();//创建标签对象
private int currentIndex = -1;//当前下标值的初始化设置
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
stage.setTitle("Menu例子");
Scene scene = new Scene(new VBox(), 400, 350);//设置场景宽度和高度
scene.setFill(Color.DARKBLUE);//场景填充颜色
name.setFont(new Font("Verdana Bold", 22));//设置标签字体
binName.setFont(new Font("Arial Italic", 10));//设置标签字体
pic.setFitHeight(150);//图片设置固定高度
pic.setPreserveRatio(true);//图片设置保留比例
description.setWrapText(true);//标签文字包围特效设置
description.setTextAlignment(TextAlignment.JUSTIFY);//设置label标签的对齐方式
shuffle();//清晰复原程序
MenuBar menuBar = new MenuBar();//创建一个MenuBar对象,以后Menu类型对象需要镶嵌到这个MenuBar对象的上面
final VBox vbox = new VBox();//创建一个垂直布局对象
vbox.setAlignment(Pos.CENTER);//设置vbox对象对齐方式
vbox.setSpacing(10);//设置vbox对象布局的元素之间的空间距离
vbox.setPadding(new Insets(0, 10, 0, 10));//设置Vbox对象内边距
vbox.getChildren().addAll(name, binName, pic, description);//vbox布局器中要添加的被布局元素对象(用vbox对象布局相关Node类型Label标签型对象)
// --- Menu File
Menu menuFile = new Menu("菜单一");
MenuItem add = new MenuItem("切换内容",
new ImageView(new Image("https://profile.csdnimg.cn/B/F/8/3_zy103118")));//创建一个MenuItem类型对象其背景设置为一个图片
add.setOnAction((ActionEvent t) -> {//MenuItem类型对象添加点击事件处理程序回调函数
shuffle();
vbox.setVisible(true);
});
MenuItem clear = new MenuItem("清除内容");//创建一个MenuItem选项组件
clear.setAccelerator(KeyCombination.keyCombination("Ctrl+E"));//Accelerator加速器引申意义为快捷方式:将名为clear的MenuItem对象的访问快捷方式设置为Ctrl+E组合键
clear.setOnAction((ActionEvent t) -> {//设置名称为clear的MenuItem对象的交互事件处理回调函数
vbox.setVisible(false);//设置vbox对象的可见性为Visible为false,则vbox对象就不可见了
});
MenuItem exit = new MenuItem("Exit");
exit.setOnAction((ActionEvent t) -> {
System.exit(0);
});
menuFile.getItems().addAll(add,new SeparatorMenuItem(), exit);//Menu菜单类型对象添加MenuItem类型选项对象
// --- Menu Edit
Menu menuEdit = new Menu("菜单二");//菜单对象的建立
menuEdit.getItems().add(clear);//给菜单二对象上添加MenuItem对象clear
// --- Menu View
Menu menuExit = new Menu("菜单三");//创建菜单对象菜单三
menuBar.getMenus().addAll(menuFile, menuEdit, menuExit);//将上述定义的Menu对象镶嵌进MenuBar类型对象中
((VBox) scene.getRoot()).getChildren().addAll(menuBar, vbox);//scene对象的根节点元素上添加上文定义的menuBar对象和vbox对象
stage.setScene(scene);//舞台设置场景
stage.show();//舞台展现
}
private void shuffle() {//洗牌程序(清晰复原程序)
int i = currentIndex;
while (i == currentIndex) {
i = (int) (Math.random() * pages.length);
}
pic.setImage(pages[i].image);//图片视图区域价值图片
name.setText(pages[i].name);//label添加文字
binName.setText("(" + pages[i].binNames + ")");//label添加文字
description.setText(pages[i].description);//label对象添加文字
currentIndex = i;
}
private class PageData {//类似于pojo这么个domain型业务领域对象
public String name;
public String description;
public String binNames;
public Image image;
public PageData(String name, String description, String binNames) {
this.name = name;
this.description = description;
this.binNames = binNames;
image = new Image(getClass().getResourceAsStream("department.png"));
}
}
}