2015-11-23 7 views
0

Я пытаюсь создать приложение GUI, но хочу, чтобы код был чистым и понятным. Это мое желание иметь меню с двумя меню, в которых есть меню, в котором есть JMenuItems. Следовательно, попытка пойти с циклом for. Я столкнулся с проблемой, что я не мог идентифицировать свои созданные JMenuItems, поэтому добавить слушателей к ним стало бы довольно сложно.Заполнение Java Menu с помощью циклов

Мой код выглядит следующим образом:

JMenuBar menubar = new JMenuBar; 
JMenu theorie = new JMenu("Theorie"); 
String[] ChapterContainer = new String[] {"Hoofdstuk 1","Hoofdstuk 2","Hoofdstuk 3","Hoofdstuk 4","Hoofdstuk 5","Hoofdstuk 6","Hoofdstuk 7","Hoofdstuk 8","Hoofdstuk 9","Hoofdstuk 10"}; 
String[] ParContainer  = new String[] {"Paragraaf 1","Paragraaf 2","Paragraaf 3","Paragraaf 4","Paragraaf 5"}; 
String[] ChapterVars  = new String[] {"h1","h2","h3","h4","h5","h6","h7","h8","h9","h10"}; 
String[] ParVars   = new String[] {"p1","p2","p3","p4","p5"}; 

for(int i = 0 ; i<ChapterVars.length ; i++){ 
    JMenu ChapterVars[i] = new JMenu(ChapterContainer[i]); 

    for(int j = 0 ; j<ParVars.length ; j++){ 
    JMenuItem ParVars[j] = new JMenuItem(ParContainer[j]); 
    // ActionListener code here 
    ChapterVars[i].add(ParVars[j]); 
    } 
    theorie.add(ChapterVars[i]); 
} 
menubar.add(theorie); 

я буду об этом в правильном направлении?

Заранее благодарен!

+1

Используйте 'Action's вместо этого, они самодостаточны единицы работы, см. [Как использовать действия] (http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html) для получения дополнительной информации. – MadProgrammer

+0

Я не рекомендую его, но метод 'ActionEvent # getActionCommand' вернет текст кнопки (или' JMenuItem' в этом случае), если на кнопке не будет установлено свойство 'actionCommand'. – MadProgrammer

+1

У вас есть ParVars, определяемый как массив String, а во внутреннем цикле попытайтесь установить parVars [j] как JMenuItem. это должно привести к ошибкам компиляции. – FredK

ответ

0

Я думаю, что вы явно движетесь в правильном направлении. Чтобы пользователи могли быстро помочь вам, пожалуйста, убедитесь, что ваш код компилируется и дает короткую демонстрацию вашего вопроса (см. stackoverflow.com/help/mcve за советом).

Раздел Java Tutorials - How to Use Menus имеет прекрасный пример того, как создавать меню.

Массивы ChapterVars и ParVars могут быть удалены, если вы добавите меню и пункты меню непосредственно в структуру. Принимая замечания FredK и camickr во внимание (но оставляя изменение использовать Action с для вас), ваш код может выглядеть следующим образом:

import javax.swing.*; 

public class PopulatingJavaMenus { 
    public static void main(final String[] arguments) { 
     new PopulatingJavaMenus().launchGui(); 
    } 

    private void launchGui() { 
     final JFrame frame = new JFrame("Stack Overflow"); 
     frame.setBounds(100, 100, 800, 600); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.setJMenuBar(createMenuBar()); 
     frame.setVisible(true); 
    } 

    private JMenuBar createMenuBar() { 
     JMenuBar menubar = new JMenuBar(); 
     JMenu theorie = new JMenu("Theorie"); 

     String[] chapterContainer = new String[]{ 
       "Hoofdstuk 1","Hoofdstuk 2","Hoofdstuk 3","Hoofdstuk 4","Hoofdstuk 5", 
       "Hoofdstuk 6","Hoofdstuk 7","Hoofdstuk 8","Hoofdstuk 9","Hoofdstuk 10"}; 

     String[] parContainer  = new String[]{ 
       "Paragraaf 1","Paragraaf 2","Paragraaf 3","Paragraaf 4","Paragraaf 5"}; 

     for (final String chapterText : chapterContainer) { 
      JMenu chapterMenu = new JMenu(chapterText); 
      for (String paragraphText : parContainer) { 
       // ActionListener code here 
       chapterMenu.add(new JMenuItem(paragraphText)); 
      } 
      theorie.add(chapterMenu); 
     } 
     menubar.add(theorie); 

     return menubar; 
    } 
}