JAVA - JMenu从文件构建

时间:2016-08-22 20:27:04

标签: java jmenu jmenuitem

我想使用具有此布局/外观的文本文件的内容构建JMenu(#为分隔符; JMenu X和JMenuItem X将替换为字符串序列):

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

如何编写一个循环,将文件内容打印到每个相应的菜单项中?

感谢您的支持。

1 个答案:

答案 0 :(得分:0)

这是有效的循环:

class menu.foobar {
    // stuff here
}

这是文本文件:

      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();
        }   
      }