|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
从一个编程语言的普及程度来将,一个好的IDE是至关中要的,而现在的java的IDE虽然已经很好了,但是和.net网页编程比起来还是稍微差一些的,这是个客观事实。java要想普及的更好。DE是必须加以改进的。
间接在程序片中安置一个菜单是不成能的(Java1.0,Java1.1和Swing库不同意),由于它们是针对使用程序的。持续,假如您不信任我而且断定在程序片中能够公道地具有菜单,那末您能够往实验一下。程序片中没有setMenuBar()办法,而这类办法是附在菜单中的(我们会看到它能够公道地在程序片发生一个帧,而且帧包括菜单)。
有四种分歧范例的MenuComponent(菜单组件),一切的菜单组件劈头于笼统类:菜单条(我们能够在一个事务帧里具有一个菜单条),菜单往安排一个独自的下拉菜单大概子菜单、菜单项来讲明菜单里一个单个的元素,和劈头于MenuItem,发生反省标记(checkmark)往显现菜单项是不是被选择的CheckBoxMenuItem。
分歧的体系利用分歧的资本,对Java和AWT而言,我们必需在源代码中手工汇编一切的菜单。- //:Menu1.java
- //MenusworkonlywithFrames.
- //Showssubmenus,checkboxmenuitems
- //andswappingmenus.
- importjava.awt.*;
- publicclassMenu1extendsFrame{
- String[]flavors={"Chocolate","Strawberry",
- "VanillaFudgeSwirl","MintChip",
- "MochaAlmondFudge","RumRaisin",
- "PralineCream","MudPie"};
- TextFieldt=newTextField("Noflavor",30);
- MenuBarmb1=newMenuBar();
- Menuf=newMenu("File");
- Menum=newMenu("Flavors");
- Menus=newMenu("Safety");
- //Alternativeapproach:
- CheckboxMenuItem[]safety={
- newCheckboxMenuItem("Guard"),
- newCheckboxMenuItem("Hide")
- };
- MenuItem[]file={
- newMenuItem("Open"),
- newMenuItem("Exit")
- };
- //Asecondmenubartoswapto:
- MenuBarmb2=newMenuBar();
- MenufooBar=newMenu("fooBar");
- MenuItem[]other={
- newMenuItem("Foo"),
- newMenuItem("Bar"),
- newMenuItem("Baz"),
- };
- Buttonb=newButton("SwapMenus");
- publicMenu1(){
- for(inti=0;i<flavors.length;i++){
- m.add(newMenuItem(flavors[i]));
- //Addseparatorsatintervals:
- if((i+1)%3==0)
- m.addSeparator();
- }
- for(inti=0;i<safety.length;i++)
- s.add(safety[i]);
- f.add(s);
- for(inti=0;i<file.length;i++)
- f.add(file[i]);
- mb1.add(f);
- mb1.add(m);
- setMenuBar(mb1);
- t.setEditable(false);
- add("Center",t);
- //Setupthesystemforswappingmenus:
- add("North",b);
- for(inti=0;i<other.length;i++)
- fooBar.add(other[i]);
- mb2.add(fooBar);
- }
- publicbooleanhandleEvent(Eventevt){
- if(evt.id==Event.WINDOW_DESTROY)
- System.exit(0);
- else
- returnsuper.handleEvent(evt);
- returntrue;
- }
- publicbooleanaction(Eventevt,Objectarg){
- if(evt.target.equals(b)){
- MenuBarm=getMenuBar();
- if(m==mb1)setMenuBar(mb2);
- elseif(m==mb2)setMenuBar(mb1);
- }
- elseif(evt.targetinstanceofMenuItem){
- if(arg.equals("Open")){
- Strings=t.getText();
- booleanchosen=false;
- for(inti=0;i<flavors.length;i++)
- if(s.equals(flavors[i]))chosen=true;
- if(!chosen)
- t.setText("Chooseaflavorfirst!");
- else
- t.setText("Opening"+s+".Mmm,mm!");
- }
- elseif(evt.target.equals(file[1]))
- System.exit(0);
- //CheckboxMenuItemscannotuseString
- //matching;youmustmatchthetarget:
- elseif(evt.target.equals(safety[0]))
- t.setText("GuardtheIceCream!"+
- "Guardingis"+safety[0].getState());
- elseif(evt.target.equals(safety[1]))
- t.setText("HidetheIceCream!"+
- "Isitcold?"+safety[1].getState());
- else
- t.setText(arg.toString());
- }
- else
- returnsuper.action(evt,arg);
- returntrue;
- }
- publicstaticvoidmain(String[]args){
- Menu1f=newMenu1();
- f.resize(300,200);
- f.show();
- }
- }///:~
复制代码
在这个程序中,我制止了为每一个菜单编写典范的冗杂的add()列表挪用,由于那看起来像很多的无用的标记。取而代之的是,我安置菜单项到数组中,然后在一个for的轮回中经由过程每一个数组挪用add()复杂地跳过。如许的话,增添和削减菜单项变得没那末厌恶了。
作为一个可选择的办法(我发明这很难令我中意,由于它必要更多的分派)CheckboxMenuItems在数组的句柄中被创立是被称为平安创立;这对数组文件和别的的文件而言是真实的平安。
程序中创立了不是一个而是二个的菜单条来证实菜单条在程序运转时能被互换激活。我们能够看到菜单条如何构成菜单,每一个菜单如何构成菜单项(MenuItems),chenkboxMenuItems大概别的的菜单(发生子菜单)。当菜单组合后,能够用setMenuBar()办法安装到如今的程序中。值得注重的是当按钮被压下时,它将反省以后的菜单安装利用getMenuBar(),然后安置别的的菜单条在它的地位上。
当测试是“open”(即入手下手)时,注重拼写和年夜写,假如入手下手时没有对象,Java收回noerror(没有毛病)的旌旗灯号。这类字符串对照是一个分明的程序计划毛病源。
校验和非校验的菜单项主动地运转,与之相干的CheckBoxMenuItems实在使人受惊,这是由于一些缘故原由它们不同意字符串婚配。(这仿佛是自相冲突的,只管字符串婚配并非一种很好的举措。)因而,我们能够婚配一个方针对象而不是它们的标签。当演示时,getState()办法用来显现形态。我们一样能够用setState()改动CheckboxMenuItem的形态。
我们大概会以为一个菜单能够公道地置进凌驾一个的菜单条中。这看似公道,由于一切我们疏忽的菜单条的add()办法都是一个句柄。但是,假如我们试图如许做,这个了局将会变得十分的别扭,而远非我们所但愿失掉的了局。(很难晓得这是一个编程中的毛病大概说是他们试图使它以这类办法往运转所发生的。)这个例子一样向我们展现了为何我们必要创建一个使用程序以替换程序片。(这是由于使用程序能撑持菜单,而程序片是不克不及间接利用菜单的。)我们从帧处承继取代从程序片处承继。别的,我们为类建一个构建器以代替init()安装事务。最初,我们创立一个main()办法而且在我们建的新型对象里,调剂它的巨细,然后挪用show()。它与程序片只在很小的中央有分歧的地方,但是这时候它已是一个自力的设置窗口使用程序而且我们可使用菜单。
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net网页编程就不一样了,保持微软的一向风格,源代码不公开 |
|