2012-04-17 99 views
-1

我希望将相同的JMenuItem添加到多个JMenus,但它只显示最后一个JMenu。这是我写的代码。我想为所有JMenu状态显示三个JMenu项目。通过这个代码,前两个状态没有JMenuItems,所有三个都只有最后一个。将JMenuItem添加到多个菜单

import javax.swing.*; 
import java.awt.event.*; 
public class Menu extends JFrame{ 
    public Menu() 
    { 
    super("Funky Menu"); 
JMenu [] states = new JMenu [3]; 
JMenuItem [] items = new JMenuItem [3]; 
//Initializing the items 
items[0] = new JMenuItem("Industries"); 
items[0].setMnemonic('I'); 
items[1] = new JMenuItem("Hill Stations"); 
items[1].setMnemonic('H'); 
items[2] = new JMenuItem("Top Institutions"); 
items[2].setMnemonic('T'); 
//Initializing the states 
//I've set the adjacent keys as the Mnemonics for easy user interaction 
//though it is less intuitive, it can vary on the user preference. 
states[0] = new JMenu("Tamil Nadu"); states[0].setMnemonic('Q'); 
states[1] = new JMenu("West Bengal"); states[1].setMnemonic('W'); 
states[2] = new JMenu("Haryana"); states[2].setMnemonic('E'); 
//Adding all the items to each of the states 
for(int i=0; i<3; ++i) 
{ 
    for(int j=0; j<3; ++j) 
    { 
    states[i].add(items[j]); 
    } 
} 
//adding action listener to menu items 
for(int j=0; j<3; ++j) 
{ 
    items[j].addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent evt) 
    { 
    //The next few lines could be clubbed together in one but for 
    //clarity sake I write them seperately 
    JMenuItem currentItem = (JMenuItem) evt.getSource(); 
    String textToDisplay = currentItem.getText(); 
    System.out.println(textToDisplay + " : located in ..."); 
    //one liner : System.out.println(((JMenuItem) evt.getSource()).getText() + " : located in ..."); 
    } 
    }); 
} 
//finally to fix up the MenuBar 
JMenuBar bar = new JMenuBar(); 
setJMenuBar(bar); 
for(int i=0; i<3; ++i) 
{ 
    bar.add(states[i]); 
} 
getContentPane(); 
//TODO Create a JLabel add it to the contents 
//Instead of writing to the console, update the frames text 
setSize(500, 500); 
setVisible(true); 
} 

    public static void main(String[] args) 
    { 
    Menu app = new Menu(); 
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 
+0

我应该如何替换JMenuItem? – nikhil 2012-04-17 16:48:07

回答

3

我没有检查你的代码,但一个组件只能有一个父代。您需要创建单独的菜单项(可能使用相同的Action对象)。

+1

@nikhil和使用ClassName菜单是AWT菜单的保留字,将其更改为MyMenu – mKorbel 2012-04-17 17:16:39

2

@Puce是正确的。相反,请使用Action来封装共享功能,并使用Action的常见实例构建单个菜单项。 FileMenu就是一个简单的例子。