写了一个窗体,里面有一个菜单~非常简单
发现一个问题,如果没有validate(),运行的时候,只有窗体,显示不出菜单,只有最大化后菜单才出现~~
如果加了validate(),一运行就出现菜单~~
请问,这是为什么?看doc,里面的意思是验证~为什么要验证?菜单项、菜单、菜单条不是已经都依次添加好了吗~
thanks
发现一个问题,如果没有validate(),运行的时候,只有窗体,显示不出菜单,只有最大化后菜单才出现~~
如果加了validate(),一运行就出现菜单~~
请问,这是为什么?看doc,里面的意思是验证~为什么要验证?菜单项、菜单、菜单条不是已经都依次添加好了吗~
thanks
{
JMenuBar jmb;
JMenu jm;
JMenuItem item1,item2;
win1()
{
super("hello");
setVisible(true);
setSize(200,200);
jmb=new JMenuBar();
jm=new JMenu("file");
item1=new JMenuItem("open");
item2=new JMenuItem("save");
jm.add(item1);
jm.add(item2);
jmb.add(jm);
setJMenuBar(jmb);
setDefaultCloseOperation(3);
validate(); //这句,如果没有的话,运行时没有菜单,只有最大化才会出现,如果有这句,运行时就有菜单~
}
}class gcx
{
public static void main(String[] args)
{
win1 win=new win1();
}
}
使用 validate 方法会使容器再次布置其子组件。已经布置容器后,在修改此容器的子组件的时候(在容器中添加或移除组件,或者更改与布局相关的信息),应该调用上述方法。
你把你代码中这两句 setSize(200,200); setVisible(true);放在validate(); 后面,这个时间,你可以不用validate(); 。其实楼上说的validate(); 是再次布置容器内的子组件也是没有错误的。
你把代码换成如下方式,可以不用validate();
win1()
{
super("hello"); jmb=new JMenuBar();
jm=new JMenu("file");
item1=new JMenuItem("open");
item2=new JMenuItem("save");
jm.add(item1);
jm.add(item2);
jmb.add(jm);
setJMenuBar(jmb);
setDefaultCloseOperation(3);
// validate(); //这句,如果没有的话,运行时没有菜单,只有最大化才会出现,如果有这句,运行时就有菜单~
setSize(200,200);
setVisible(true); }
如果先写了菜单,然后再写规定窗体的内容~就等于在最后布置了窗体,所以不用validate()了
是这样吗?