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)先执行的。然后再执行了最外层的那部分,这怎么解释呢??
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)先执行的。然后再执行了最外层的那部分,这怎么解释呢??
里面的计算结果是要作为参数传给外面呢,这个参数不计算出来,外面是无法计算的