2016-08-22 14 views
-3

Я хотел бы построить JMenu с использованием содержимого текстового файла с этим макет/внешний вид (# для сепаратора, JMenu X и ​​JMenuItem X будут заменены последовательностями Струнные):JAVA - JMenu построен из файла

JMenu 1 # JMenuItem 1 
JMenu 1 # JMenuItem 2 
JMenu 1 # JMenuItem 3 
JMenu 2 # JMenuItem 1 
JMenu 2 # JMenuItem 2 
JMenu 3 # JMenuItem 1 
JMenu 3 # JMenuItem 2 
JMenu 3 # JMenuItem 3 
JMenu 3 # JMenuItem 4 

Как написать цикл, который будет печатать содержимое файла в каждом из соответствующих пунктов меню?

Спасибо за вашу поддержку.

+0

Я просто на листе бумаги перед кодированием, потому что я понятия не имею для этого цикла. Я думал, что использовать FileInputStream и BufferedInputStream для чтения файла и использовать HashMap для размещения строк с JMenu в качестве ключей и JMenuItem в качестве значений. Затем, прочитайте мой HashMap, чтобы построить меню. – Fred

+0

Хорошо. Попробуй это. Если вы столкнулись с любыми ошибками, спросите еще раз. – bradimus

+0

Конечно! Я просто ищу идеи и треки. – Fred

ответ

0

Вот цикл, который работает:

 FileReader monFichier = null; 
     BufferedReader tampon = null; 
     ArrayList<JMenu> tJMenu = new ArrayList<JMenu>(); 

     try { 
     monFichier = new FileReader("param/tableMenu.bat"); 
     // Connecte les flux : 
     tampon = new BufferedReader(monFichier); 
     while (true) { 
      // Lit une ligne du fichier : 
      String ligne = tampon.readLine(); 
      // Vérifie la fin de fichier 
      if (ligne == null) 
      break; 
      //On récupère la position du "#" : 
      int pos = ligne.indexOf("#"); 
      //On renseigne nos tableaux : 
      boolean existant = false; 
      for (JMenu m : tJMenu) 
      { 
       if (m.getText().equals(ligne.substring(0, pos-1))) 
       { 
        m.add(new JMenuItem(ligne.substring(pos+2, ligne.length()))); 
        existant = true; 
       } 
      } 
      if (!existant) 
      { 
      tJMenu.add(new JMenu(ligne.substring(0, pos-1))); 
      for (JMenu m : tJMenu) 
      { 
       if (m.getText().equals(ligne.substring(0, pos-1))) 
       { 
        m.add(new JMenuItem(ligne.substring(pos+2, ligne.length()))); 
       } 
      } 
      } 
     } // Fin du while 

     JMenuBar menu = new JMenuBar(); 
     JFrame f = new JFrame(); 
     JPanel p = new JPanel(); 
     f.setContentPane(p); 
     f.setJMenuBar(menu); 
     f.setSize(600, 800); 
     f.setVisible(true); 

     for (JMenu m : tJMenu) 
      { 
       menu.add(m); 
      } 

     } catch (IOException exception) { 
     exception.printStackTrace(); 
     } finally { 
     try { 
      tampon.close(); 
      monFichier.close(); 
     } catch(IOException exception1) { 
      exception1.printStackTrace(); 
     } 
     } 

А вот текстовый файл:

JMenu 1 # JMenuItem 1.1 
JMenu 1 # JMenuItem 2.1 
JMenu 1 # JMenuItem 3.1 
JMenu 2 # JMenuItem 1.2 
JMenu 2 # JMenuItem 2.2 
JMenu 3 # JMenuItem 1.3 
JMenu 3 # JMenuItem 2.3 
JMenu 3 # JMenuItem 3.3 
JMenu 3 # JMenuItem 4.3