2012-04-17 2 views
-1

Я хочу добавить те же JMenuItems в несколько 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

ответ

3

Я не проверял ваш код, но у компонента может быть только один родитель. Вам нужно создать отдельные пункты меню (возможно, используя один и тот же объект Action).

+1

@nikhil и used ClassName Меню зарезервировано для меню AWT, измените это на MyMenu – mKorbel

2

@Puce правильный. Вместо этого используйте Action, чтобы инкапсулировать общую функциональность и позволить отдельным элементам меню быть построены с общим экземпляром Action. FileMenu - простой пример.

 Смежные вопросы

  • Нет связанных вопросов^_^