红色的是MenuBar,黄色的是Menue,蓝色的是MenuItem。
package top.onefine.demo.javafx;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCombination;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import java.net.URL;
import java.util.Objects;
public class Demo extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
AnchorPane anchorPane = new AnchorPane();
anchorPane.setStyle("-fx-background-color: #FFFF00");
MenuBar menuBar = new MenuBar();
Menu menu1 = new Menu("menu1");
Menu menu2 = new Menu("menu2");
Menu menu3 = new Menu("menu3");
menuBar.getMenus().addAll(menu1, menu2, menu3);
MenuItem item1 = new MenuItem("item1");
MenuItem item2 = new MenuItem("item2");
// , new ImageView(Objects.requireNonNull(
// getClass().getClassLoader().getResource("icons/help.png")).toExternalForm()
// )
// ); // 带图标的菜单项
// 另一种方式
URL img_url = getClass().getClassLoader().getResource("icons/help.png");
assert img_url != null;
Image img = new Image(img_url.toExternalForm(), 30, 30, true, false, true);
ImageView imageView = new ImageView(img);
item2.setGraphic(imageView);
MenuItem item3 = new MenuItem("item3");
menu1.getItems().addAll(item1, item2, item3);
// 菜单项指定快捷键的一种方式
item1.setAccelerator(KeyCombination.valueOf("ctrl + i")); // CTRL + I
// 对菜单监听——显示时,隐藏时同理
// menu1.setOnShowing(new EventHandler() {
// @Override
// public void handle(Event event) {
// System.out.println("显示过程中...");
// }
// });
// 对菜单监听——显示完成后,隐藏完成后同理
// menu1.setOnShown(new EventHandler() {
// @Override
// public void handle(Event event) {
// System.out.println("显示完成!");
// }
// });
// 对菜单项监听——单击事件
item1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("被点击了");
}
});
anchorPane.getChildren().add(menuBar);
Scene scene = new Scene(anchorPane);
primaryStage.setScene(scene);
primaryStage.setTitle("Demo");
primaryStage.setWidth(1600);
primaryStage.setHeight(900);
primaryStage.show();
// 设置菜单条长度
menuBar.setPrefWidth(primaryStage.getWidth());
// 宽度监听设置菜单条长度
anchorPane.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
menuBar.setPrefWidth(newValue.doubleValue());
}
});
}
}
package top.onefine.demo.javafx;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyCombination;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import java.net.URL;
import java.util.Objects;
public class Demo extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
AnchorPane anchorPane = new AnchorPane();
anchorPane.setStyle("-fx-background-color: #FFFF00");
MenuBar menuBar = new MenuBar();
Menu menu1 = new Menu("menu1");
Menu menu2 = new Menu("menu2");
Menu menu3 = new Menu("menu3");
menuBar.getMenus().addAll(menu1, menu2, menu3);
MenuItem item1 = new MenuItem("item1");
MenuItem item2 = new MenuItem("item2");
MenuItem item3 = new MenuItem("item3");
// 分割符(一条线)
SeparatorMenuItem separatorMenuItem = new SeparatorMenuItem();
// 子菜单
Menu menu4 = new Menu("menu4");
MenuItem item5 = new MenuItem("MenuItem5");
MenuItem item6 = new MenuItem("MenuItem6");
menu4.getItems().addAll(item5, item6);
menu1.getItems().addAll(item1, item2, separatorMenuItem, menu4, item3);
// menu3.setDisable(true); // 设置禁用
// item2.setDisable(true);
// item2.setVisible(false); // 设置不可见
// 菜单栏单选
ToggleGroup tg = new ToggleGroup(); // 组
RadioMenuItem radioMenuItem1 = new RadioMenuItem("RadioMenuItem1");
RadioMenuItem radioMenuItem2 = new RadioMenuItem("RadioMenuItem2");
RadioMenuItem radioMenuItem3 = new RadioMenuItem("RadioMenuItem3");
radioMenuItem1.setToggleGroup(tg);
radioMenuItem2.setToggleGroup(tg);
radioMenuItem3.setToggleGroup(tg);
menu2.getItems().addAll(radioMenuItem1, radioMenuItem2, radioMenuItem3);
radioMenuItem3.setSelected(true); // 设置默认为选中状态
// 绑定单击事件
radioMenuItem1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
RadioMenuItem source = (RadioMenuItem) event.getSource();// 获得事件源
System.out.println(source.isSelected()); // 判断是否被选中
// 或者直接点
System.out.println(radioMenuItem1.isSelected());
}
});
// 菜单栏多选
CheckMenuItem checkMenuItem1 = new CheckMenuItem("checkMenuItem1");
CheckMenuItem checkMenuItem2 = new CheckMenuItem("checkMenuItem2");
CheckMenuItem checkMenuItem3 = new CheckMenuItem("checkMenuItem3");
menu3.getItems().addAll(checkMenuItem1, checkMenuItem2, checkMenuItem3);
checkMenuItem2.setSelected(true); // 设置默认选中
checkMenuItem3.setSelected(true);
// 绑定单击事件
checkMenuItem1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
CheckMenuItem source = (CheckMenuItem) event.getSource();// 获得事件源
System.out.println(source.isSelected()); // 判断是否被选中
// 或者直接点
System.out.println(checkMenuItem1.isSelected());
}
});
anchorPane.getChildren().add(menuBar);
Scene scene = new Scene(anchorPane);
primaryStage.setScene(scene);
primaryStage.setTitle("Demo");
primaryStage.setWidth(1600);
primaryStage.setHeight(900);
primaryStage.show();
// 设置菜单条长度
menuBar.setPrefWidth(primaryStage.getWidth());
// 宽度监听设置菜单条长度
anchorPane.widthProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
menuBar.setPrefWidth(newValue.doubleValue());
}
});
}
}
更新中:https://www.bilibili.com/video/BV1rt411f7bf