import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class myTest extends JFrame{
    public JMenuBar mBar;    public myTest(){
      setSize(200,150);
      mBar=new JMenuBar();
      mBar.add(makeMenu("menu",new Object[] {makeMenu("m1",new Object[] {"a1","a2","a3"},this),makeMenu("m2",new Object[] {"b1","b2","b3","b4"},this)},this));
      setJMenuBar(mBar);
      addWindowListener(new WindowAdapter(){
       public void windowClosing(WindowEvent e){
         System.exit(0);
       }
      });
    }  
    
    public static JMenu makeMenu(Object parent,Object[] items,Object target){
     System.out.println(items.length);
      JMenu m=null;
      if(parent instanceof JMenu)
        m=(JMenu)parent;
      else if(parent instanceof String){
        m=new JMenu((String)parent);
        System.out.println(m.getActionCommand());
      }  
      else return null;
      for(int i=0;i<items.length;i++){
        if(items[i]==null)
          m.addSeparator();
        else 
          m.add(makeMenuItem(items[i],target));
      }
      return m;
    }    public static JMenuItem makeMenuItem(Object item,Object target){
      JMenuItem r=null;
      if(item instanceof JMenuItem)
        r=(JMenuItem)item;
      else if(item instanceof String)
        r=new JMenuItem((String)item);
      else return null;
      if(target instanceof ActionListener)
        r.addActionListener((ActionListener)target);
      return r;
    }
  public static void main(String[] args){
    myTest mF=new myTest();
    mF.show();
  }
}这是我练习编写菜单时的程序,此程序能运行,但是,其中的运行机制,我搞不明白。希望高手们能给详细的讲解一下。我还想知道,我为什么搞不明白,是哪个知识点我没看懂呢?希望指点迷经。不胜感激。
此程序的运行结果是:
3
m1
4
m2
2
menu
这说明是mBar.add(makeMenu("menu",new Object[] {makeMenu("m1",new Object[] {"a1","a2","a3"},this),makeMenu("m2",new Object[] {"b1","b2","b3","b4"},this)},this));中的嵌套调用makeMenu("m1",new Object[] {"a1","a2","a3"},this)先执行的。然后再执行了最外层的那部分,这怎么解释呢??