JavaFX |菜单按钮
MenuButton 是 JavaFX 库的一部分。 menuButton 按下时会显示一个上下文菜单,其中显示一组项目,用户可以选择任何项目。它通常包含几个菜单项,用户一次最多可以选择一个菜单项。
MenuButton 类的构造函数是:
- MenuButton() : 创建一个新的菜单按钮
- MenuButton(String t) : 创建一个带有指定文本的菜单按钮
- MenuButton(String t, Node g) : 创建一个带有指定文本的菜单按钮
和图形 - MenuButton(String t, Node g, MenuItem... i)创建一个带有指定文本、图形和菜单项的菜单按钮
常用方法:method explanation getItems() returns the items of the menu button getPopupSide() get the value of property popupSide hide() hides the context menu isShowing() Gets the value of the property showing. setPopupSide(Side v) Sets the value of the property popupSide. show() shows the context menu
下面的程序说明了 MenuButton 类:
- 创建一个 MenuButton 并向其添加 MenuItems 的程序:将创建一个名为 m 的 MenuButton,并将 3 个菜单项 m1、m2、m3 添加到 menuButton m。菜单栏将在场景内创建,而场景又将托管在舞台内。函数setTitle() 用于为舞台提供标题。然后创建一个 tilepane,调用 addChildren() 方法将菜单按钮附加到场景中。最后调用 show() 方法显示最终结果。
Java
// Program to create a menubutton and add menuitems to it
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.collections.*;
import javafx.stage.Stage;
import javafx.scene.text.Text.*;
import javafx.scene.paint.*;
import javafx.scene.text.*;
public class MenuButton_1 extends Application {
// labels
Label l;
// launch the application
public void start(Stage s)
{
// set title for the stage
s.setTitle("creating MenuButton ");
// create a tile pane
TilePane r = new TilePane();
// create a label
Label l1 = new Label("This is a MenuButton example ");
// create a menu button
MenuButton m = new MenuButton("menuButton");
// create menuitems
MenuItem m1 = new MenuItem("menu item 1");
MenuItem m2 = new MenuItem("menu item 2");
MenuItem m3 = new MenuItem("menu item 3");
// add menu items to menu
m.getItems().add(m1);
m.getItems().add(m2);
m.getItems().add(m3);
// create a tilepane
TilePane vb = new TilePane(l1, m);
// create a scene
Scene sc = new Scene(vb, 200, 200);
// set the scene
s.setScene(sc);
s.show();
}
public static void main(String args[])
{
// launch the application
launch(args);
}
}
Java
// Program to create a menubutton and add menuitems
// to it and also add event handler to handle events
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.WindowEvent;
import javafx.event.EventHandler.*;
import javafx.event.EventHandler;
import javafx.event.ActionEvent;
import javafx.collections.*;
import javafx.stage.Stage;
import javafx.scene.text.Text.*;
import javafx.scene.paint.*;
import javafx.scene.text.*;
public class MenuButton_2 extends Application {
// labels
Label l;
// launch the application
public void start(Stage s)
{
// set title for the stage
s.setTitle("creating MenuButton ");
// create a tile pane
TilePane r = new TilePane();
// create a label
Label l1 = new Label("This is a MenuButton example ");
// create a menu
MenuButton m = new MenuButton("MenuButton");
// create menuitems
MenuItem m1 = new MenuItem("menu item 1");
MenuItem m2 = new MenuItem("menu item 2");
MenuItem m3 = new MenuItem("menu item 3");
// add menu items to menu
m.getItems().add(m1);
m.getItems().add(m2);
m.getItems().add(m3);
// label to display the selected menuitem
Label l2 = new Label("default menuitem selected");
// create action event
EventHandler event1 = new EventHandler() {
public void handle(ActionEvent e)
{
l2.setText(((MenuItem)e.getSource()).getText() + " selected");
}
};
// add action events to the menuitems
m1.setOnAction(event1);
m3.setOnAction(event1);
m2.setOnAction(event1);
// create a tilepane
TilePane vb = new TilePane(l1);
vb.getChildren().add(m);
vb.getChildren().add(l2);
// create a scene
Scene sc = new Scene(vb, 200, 200);
// set the scene
s.setScene(sc);
s.show();
}
public static void main(String args[])
{
// launch the application
launch(args);
}
}
输出:
- 创建一个菜单按钮并向其添加菜单项并添加一个事件处理程序来处理事件的程序:将创建一个名为 m 的菜单按钮,并将 3 个菜单项 m1、m2、m3 添加到菜单按钮 m。菜单栏将在场景内创建,而场景又将托管在舞台内。函数setTitle() 用于为舞台提供标题。然后创建一个 tilepane,调用 addChildren() 方法将菜单按钮附加到场景中。最后调用 show() 方法显示最终结果。将创建事件处理程序来处理菜单项的事件。将创建一个标签 l2 以显示选择了哪个菜单项。
Java
// Program to create a menubutton and add menuitems
// to it and also add event handler to handle events
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.WindowEvent;
import javafx.event.EventHandler.*;
import javafx.event.EventHandler;
import javafx.event.ActionEvent;
import javafx.collections.*;
import javafx.stage.Stage;
import javafx.scene.text.Text.*;
import javafx.scene.paint.*;
import javafx.scene.text.*;
public class MenuButton_2 extends Application {
// labels
Label l;
// launch the application
public void start(Stage s)
{
// set title for the stage
s.setTitle("creating MenuButton ");
// create a tile pane
TilePane r = new TilePane();
// create a label
Label l1 = new Label("This is a MenuButton example ");
// create a menu
MenuButton m = new MenuButton("MenuButton");
// create menuitems
MenuItem m1 = new MenuItem("menu item 1");
MenuItem m2 = new MenuItem("menu item 2");
MenuItem m3 = new MenuItem("menu item 3");
// add menu items to menu
m.getItems().add(m1);
m.getItems().add(m2);
m.getItems().add(m3);
// label to display the selected menuitem
Label l2 = new Label("default menuitem selected");
// create action event
EventHandler event1 = new EventHandler() {
public void handle(ActionEvent e)
{
l2.setText(((MenuItem)e.getSource()).getText() + " selected");
}
};
// add action events to the menuitems
m1.setOnAction(event1);
m3.setOnAction(event1);
m2.setOnAction(event1);
// create a tilepane
TilePane vb = new TilePane(l1);
vb.getChildren().add(m);
vb.getChildren().add(l2);
// create a scene
Scene sc = new Scene(vb, 200, 200);
// set the scene
s.setScene(sc);
s.show();
}
public static void main(String args[])
{
// launch the application
launch(args);
}
}
输出:
注意:上述程序可能无法在在线 IDE 中运行。请使用离线编译器。
参考: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/MenuButton.html