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