2016-08-22 53 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