日期:2011-03-22 16:16:00 来源:本站整理
<b>java菜单实现</b>[Java编程]
本文“<b>java菜单实现</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
直接在程序片中安设一个菜单是不大概的(Java 1.0,Java1.1和Swing库不答应),因为它们是针对利用程序的.持续,假如您不相信我并且肯定在程序片中可以公道地拥有菜单,那么您可以去试验一下.程序片中没有setMenuBar()办法,而这种办法是附在菜单中的(我们会看到它可以公道地在程序片产生一个帧,并且帧包含菜单).
有四种差别范例的MenuComponent(菜单组件),全部的菜单组件发源于抽象类:菜单条(我们可以在一个事件帧里拥有一个菜单条),菜单去支配一个单独的下拉菜单大概子菜单、菜单项来阐明菜单里一个单个的元素,以及发源于MenuItem,产生查抄标志(checkmark)去显示菜单项能否被挑选的CheckBoxMenuItem.
差别的系统利用差别的资源,对Java和AWT而言,我们必须在源代码中手工汇编全部的菜单.
在这个程序中,我避免了为每个菜单编写典型的冗长的add()列表调用,因为那看起来像很多的无用的标志.取而代之的是,我安设菜单项到数组中,然后在一个for的循环中通过每个数组调用add()简单地跳过.这样的话,增添和削减菜单项变得没那么讨厌了.//: Menu1.java // Menus work only with Frames. // Shows submenus, checkbox menu items // and swapping menus. import java.awt.*; public class Menu1 extends Frame { String[] flavors = { "Chocolate", "Strawberry", "Vanilla Fudge Swirl", "Mint Chip", "Mocha Almond Fudge", "Rum Raisin", "Praline Cream", "Mud Pie" }; TextField t = new TextField("No flavor", 30); MenuBar mb1 = new MenuBar(); Menu f = new Menu("File"); Menu m = new Menu("Flavors"); Menu s = new Menu("Safety"); // Alternative approach: CheckboxMenuItem[] safety = { new CheckboxMenuItem("Guard"), new CheckboxMenuItem("Hide") }; MenuItem[] file = { new MenuItem("Open"), new MenuItem("Exit") }; // A second menu bar to swap to: MenuBar mb2 = new MenuBar(); Menu fooBar = new Menu("fooBar"); MenuItem[] other = { new MenuItem("Foo"), new MenuItem("Bar"), new MenuItem("Baz"), }; Button b = new Button("Swap Menus"); public Menu1() { for(int i = 0; i < flavors.length; i++) { m.add(new MenuItem(flavors[i])); // Add separators at intervals: if((i+1) % 3 == 0) m.addSeparator(); } for(int i = 0; i < safety.length; i++) s.add(safety[i]); f.add(s); for(int i = 0; i < file.length; i++) f.add(file[i]); mb1.add(f); mb1.add(m); setMenuBar(mb1); t.setEditable(false); add("Center", t); // Set up the system for swapping menus: add("North", b); for(int i = 0; i < other.length; i++) fooBar.add(other[i]); mb2.add(fooBar); } public boolean handleEvent(Event evt) { if(evt.id == Event.WINDOW_DESTROY) System.exit(0); else return super.handleEvent(evt); return true; } public boolean action(Event evt, Object arg) { if(evt.target.equals(b)) { MenuBar m = getMenuBar(); if(m == mb1) setMenuBar(mb2); else if (m == mb2) setMenuBar(mb1); } else if(evt.target instanceof MenuItem) { if(arg.equals("Open")) { String s = t.getText(); boolean chosen = false; for(int i = 0; i < flavors.length; i++) if(s.equals(flavors[i])) chosen = true; if(!chosen) t.setText("Choose a flavor first!"); else t.setText("Opening "+ s +". Mmm, mm!"); } else if(evt.target.equals(file[1])) System.exit(0); // CheckboxMenuItems cannot use String // matching; you must match the target: else if(evt.target.equals(safety[0])) t.setText("Guard the Ice Cream! " + "Guarding is " + safety[0].getState()); else if(evt.target.equals(safety[1])) t.setText("Hide the Ice Cream! " + "Is it cold? " + safety[1].getState()); else t.setText(arg.toString()); } else return super.action(evt, arg); return true; } public static void main(String[] args) { Menu1 f = new Menu1(); f.resize(300,200); f.show(); } } ///:~
作为一个可挑选的办法(我发现这很难令我称心,因为它需求更多的分配)CheckboxMenuItems在数组的句柄中被成立是被称为安全成立;这对数组文件和别的的文件而言是真正的安全.
程序中成立了不是一个而是二个的菜单条来证明菜单条在程序运行时能被交换激活.我们可以看到菜单条怎样构成菜单,每个菜单怎样构成菜单项(MenuItems),chenkboxMenuItems大概别的的菜单(产生子菜单).当菜单组合后,可以用setMenuBar()办法安装到目前的程序中.值得注意的是当按钮被压下时,它将查抄当前的菜单安装利用getMenuBar(),然后安设别的的菜单条在它的位置上.
当测试是“open”(即开始)时,注意拼写和大写,假如开始时没有对象,Java发出no error(没有错误)的信号.这种字符串对比是一个明显的程序计划错误源.
校验和非校验的菜单项自动地运行,与之相关的CheckBoxMenuItems着实令人吃惊,这是因为一些缘由它们不答应字符串匹配.(这仿佛是自相冲突的,固然字符串匹配并非一种很好的办法.)因此,我们可以匹配一个目标对象而不是它们的标签.当演示时,getState()办法用来显示状况.我们一样可以用setState()改变CheckboxMenuItem的状况.
我们大概会认为一个菜单可以公道地置入超越一个的菜单条中.这看似公道,因为全部我们忽视的菜单条的add()办法都是一个句柄.但是,假如我们试图这样做,这个后果将会变得非常的别扭,而远非我们所但愿得到的后果.(很难知道这是一个编程中的错误大概说是他们试图使它以这种办法去运行所产生的.)这个例子一样向我们展示了为什么我们需求成立一个利用程序以替换程序片.(这是因为利用程序能支持菜单,而程序片是不能直接利用菜单的.)我们从帧处担当替换从程序片处担当.别的,我们为类建一个构建器以代替init()安装事件.最后,我们成立一个main()办法并且在我们建的新型对象里,调整它的大小,然后调用show().它与程序片只在很小的地方有差别之处,但是这时它已经是一个独立的设置窗口利用程序并且我们可以利用菜单.
以上是“<b>java菜单实现</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论