Java 如何获取当前选定的菜单或菜单项
单击当前选定的菜单或菜单项时,如何检索该菜单或菜单项,随后的路径将打印在控制台上。在这段代码中,我完成了多达4个级别的菜单和子菜单。并希望在单击时打印所选菜单和子菜单的路径。我在这个程序中使用swing概念。请帮忙。提前谢谢Java 如何获取当前选定的菜单或菜单项,java,swing,jmenu,jmenuitem,jmenubar,Java,Swing,Jmenu,Jmenuitem,Jmenubar,单击当前选定的菜单或菜单项时,如何检索该菜单或菜单项,随后的路径将打印在控制台上。在这段代码中,我完成了多达4个级别的菜单和子菜单。并希望在单击时打印所选菜单和子菜单的路径。我在这个程序中使用swing概念。请帮忙。提前谢谢 import java.awt.Component; import java.awt.event.KeyEvent; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenu
import java.awt.Component;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.MenuElement;
import javax.swing.MenuSelectionManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Menu {
public static void main(final String args[]) {
JFrame frame = new JFrame("MenuSample Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
JMenu worldMenu = new JMenu("world");
menuBar.add(worldMenu);
JMenu indMenu = new JMenu("India");
worldMenu.add(indMenu);
/* creates menu */
JMenu odMenu = new JMenu("Odisha");
indMenu.add(odMenu);
JMenu delhiMenu = new JMenu("Delhi");
indMenu.add(delhiMenu);
JMenu upMenu = new JMenu("Uttar Pradesh");
indMenu.add(upMenu);
JMenu mpMenu = new JMenu("Madhya Pradesh");
indMenu.add(mpMenu);
JMenu ausMenu = new JMenu("Australia");
worldMenu.add(ausMenu);
JMenu AmericaMenu = new JMenu("America");
worldMenu.add(AmericaMenu);
/* creates submenu */
JMenu bbMenu = new JMenu("Bhubaneswar");
odMenu.add(bbMenu);
JMenu bmMenu = new JMenu("Berhampur");
odMenu.add(bmMenu);
/*creates sub sub menu */
JMenuItem rjMenuItem = new JMenuItem("Raj Mahal");
bbMenu.add(rjMenuItem);
JMenuItem abMenuItem = new JMenuItem("Acharya Bihar");
bbMenu.add(abMenuItem);
JMenuItem bnMenuItem = new JMenuItem("Bani Bihar");
bbMenu.add(bnMenuItem);
/* retrieving path */
MenuSelectionManager.defaultManager().addChangeListener(
new ChangeListener() {
public void stateChanged(ChangeEvent evt) {
MenuElement[] path = MenuSelectionManager.defaultManager()
.getSelectedPath();
//
int s=0;
for (int i = 0; i < path.length; i++) {
Component c = path[i].getComponent();
if (c instanceof JMenuItem) {
JMenuItem mi = (JMenuItem) c;
String label = mi.getText();
System.out.println("LEVEL----" + s);
System.out.println("you hv selected:"+label);
s++;
}
}
}
});
//
frame.setJMenuBar(menuBar);
frame.setSize(350, 250);
frame.setVisible(true);
}
}
导入java.awt.Component;
导入java.awt.event.KeyEvent;
导入javax.swing.JFrame;
导入javax.swing.JMenu;
导入javax.swing.JMenuBar;
导入javax.swing.JMenuItem;
导入javax.swing.MenuElement;
导入javax.swing.MenuSelectionManager;
导入javax.swing.event.ChangeEvent;
导入javax.swing.event.ChangeListener;
公共类菜单{
公共静态void main(最终字符串参数[]){
JFrame=newjframe(“MenuSample示例”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar=新的JMenuBar();
JMenu世界菜单=新JMenu(“世界”);
菜单栏。添加(世界菜单);
JMenu indMenu=新JMenu(“印度”);
添加(indMenu);
/*创建菜单*/
JMenu odMenu=新JMenu(“Odisha”);
indMenu.add(odMenu);
JMenu delhiMenu=新德里;
indMenu.add(delhiMenu);
JMenu upMenu=新JMenu(“北方邦”);
indMenu.add(向上菜单);
JMenu mpMenu=新JMenu(“中央邦”);
indMenu.add(mpMenu);
JMenu auscmenu=新JMenu(“澳大利亚”);
添加(菜单);
JMenu AmericaMenu=新JMenu(“美国”);
添加(AmericaMenu);
/*创建子菜单*/
JMenu bbMenu=新JMenu(“Bhubaneswar”);
odMenu.add(bbMenu);
JMenu bmMenu=新JMenu(“Berhampur”);
odMenu.add(bmMenu);
/*创建子菜单*/
JMenuItem rjMenuItem=新JMenuItem(“Raj Mahal”);
bbMenu.add(rjMenuItem);
JMenuItem abMenuItem=新JMenuItem(“阿查里亚比哈尔”);
bbMenu.add(abMenuItem);
JMenuItem bMenuItem=新的JMenuItem(“巴尼比哈尔”);
bbMenu.add(bMenuItem);
/*检索路径*/
MenuSelectManager.defaultManager().addChangeListener(
新的ChangeListener(){
公共无效状态已更改(ChangeEvent evt){
MenuElement[]路径=MenuSelectManager.defaultManager()
.getSelectedPath();
//
int s=0;
for(int i=0;i
如何获取当前选定的
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
public class MenuExample {
private JFrame frame;
private JLabel choiceIndicator;
MenuExample create() {
frame = createFrame();
choiceIndicator = new JLabel();
frame.setJMenuBar(createMenuBar());
frame.getContentPane().add(createContent());
return this;
}
private Component createContent() {
JPanel panel = new JPanel();
panel.add(new JLabel("Last menu item choice:"));
panel.add(choiceIndicator);
return panel;
}
private JMenuBar createMenuBar() {
JMenuBar menuBar = new JMenuBar();
menuBar.add(createWorld());
return menuBar;
}
private JMenu createWorld() {
JMenu worldMenu = new JMenu("World");
worldMenu.add(createIndia());
worldMenu.add(new JMenu("Australia"));
worldMenu.add(new JMenu("America"));
return worldMenu;
}
private JMenu createIndia() {
JMenu india = new JMenu("India");
india.add(createOdisha());
india.add(new JMenu("Delhi"));
india.add(new JMenu("Uttar Pradesh"));
india.add(new JMenu("Madhya Pradesh"));
return india;
}
private JMenuItem createOdisha() {
JMenu menu = new JMenu("Odisha");
menu.add(createBhubaneswar());
menu.add(new JMenu("Berhampur"));
return menu;
}
private JMenuItem createBhubaneswar() {
JMenu menu = new JMenu("Bhubaneswar");
menu.add(choiceItem("Raj Mahal"));
menu.add(choiceItem("Acharya Bihar"));
menu.add(choiceItem("Bani Bihar"));
return menu;
}
private JMenuItem choiceItem(String text) {
return new JMenuItem(new Choice(text, choiceIndicator));
}
private JFrame createFrame() {
JFrame frame = new JFrame(getClass().getSimpleName());
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
return frame;
}
void show() {
frame.setSize(350, 250);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MenuExample().create().show();
}
});
}
class Choice extends AbstractAction {
private final JLabel choiceIndicator;
public Choice(String text, JLabel choiceIndicator) {
this(text, null, null, null, choiceIndicator);
}
public Choice(String text, ImageIcon icon, String desc, Integer mnemonic, JLabel choiceIndicator) {
super(text, icon);
putValue(SHORT_DESCRIPTION, desc);
putValue(MNEMONIC_KEY, mnemonic);
this.choiceIndicator = choiceIndicator;
}
public void actionPerformed(ActionEvent e) {
choiceIndicator.setText(e.getActionCommand());
}
}
}
请发布您尝试过的内容?发布代码@Tamilselvan,您的代码中有什么不起作用?当我将鼠标悬停在菜单上时,它会显示访问过的菜单,我想修改它,因为单击特定菜单和子菜单时,将打印选定的路径@MadProgrammer@javajon请帮助解决这个问题。非常感谢先生,我会记住你提到的所有这些概念。