程序员人生 网站导航

AWT菜单:

栏目:php教程时间:2016-11-14 10:07:32

AWT菜单:
与创建GUI界面的方式类似,创建AWT菜单就是将菜单条、菜单项和菜单组合在1起。
(1)AWT中的菜单由以下几个类组合而成:
MenuBar 菜单条,菜单的容器
Menu 菜单组件,菜单项的容器
PopupMenu 上下文菜单组件(右键菜单组件)
MenuItem 菜单项组件
CheckboxMenuItem 复选框菜单组件
MenuShortcut 菜单快捷键组件

(2)MenuBar和Menu都实现了菜单容器接口,所以MenuBar可用于艳服Menu,而Menu可用于艳服MenuItem(包括Menu和CheckboxMenuItem两个子类对象),Meun还有1个子类:PopupMenu,代表上下文菜单,上下文菜单无需使用MenuBar艳服。
(3)Menu/MenuItem的构造器都可以接受1个字符串参数,该字符串作为其对应菜单、菜单项上的标签文本。除此以外,MenuItem还可以接受1个MenuShortcut对象,该对象用于指定该菜单的快捷键。MenuShortcut类使用虚拟键代码(而不是字符)来创建快捷键。
例如:Ctrl+A(通常都使用Ctrl键作为快捷键的辅助键)

快捷方式通过以下代码创建
MenuShortcut ms=new MenuShortcut(KeyEvent.VK_A)
如果还需要Shift键的辅助,则可使用以下代码:
MenuShortcut ms=new MenuShortcut(KeyEvent.VK_A,true)
(3)有时候程序还希望对菜单进行分组,将功能类似的菜单分成1组,此时需要使用菜单分隔符。AWT中添加菜单分隔符有以下两种方法
a.调用Menu对象的addSeparator()方法来添加菜单分隔线。
b.使用添加new MenuItem(“-“)的方式添加菜单分隔线。

(4)创建了MenuItem Menu MenuBar 对象以后,调用Menu的add()方法将多个MenuItem组合成菜单(也能够将另外一个Menu菜单组合进来,从而构成2级菜单),在调用MenuBar的add()方法,将多个Menu组合成菜单条,最后调用Frame对象的setMenuBar()方法为该窗口添加菜单条。

实例程序:

package com.zou; import java.awt.CheckboxMenuItem; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.MenuShortcut; import java.awt.TextArea; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; public class SimpleMenu{ Frame f=new Frame("菜单测试"); MenuBar mb=new MenuBar(); Menu file =new Menu("文件"); Menu edit =new Menu("编辑"); MenuItem newItem =new MenuItem("新建"); MenuItem saveItem=new MenuItem("保存"); //创建exitItem菜单项,指定使用Ctrl+x 快捷键 MenuItem exitItem=new MenuItem("退出", new MenuShortcut(KeyEvent.VK_X)); CheckboxMenuItem autoWrap=new CheckboxMenuItem("自动换行"); MenuItem copyItem=new MenuItem("复制"); MenuItem pasteItem=new MenuItem("粘贴"); Menu format=new Menu("格式"); //创建commonItem菜单项,指定使用CtrShift+/ 快捷键 MenuItem commonItem=new MenuItem("注释", new MenuShortcut(KeyEvent.VK_SLASH,true)); MenuItem cancelItem=new MenuItem("取消注释"); TextArea ta=new TextArea(8, 60); public void init(){ //以lambda表达式创建菜单事项监听器 ActionListener menuListener=e -> { String cmd =e.getActionCommand(); ta.append("单击"+cmd+"菜单"+"\n"); if(cmd.equals("退出")){ System.exit(0); } }; //为commonItem菜单项添加事件监听器 commonItem.addActionListener(menuListener); exitItem.addActionListener(menuListener); //为file菜单添加菜单项 file.add(newItem); file.add(saveItem); file.add(exitItem); //为eidt菜单添加菜单项 edit.add(autoWrap); //使用addSeparator方法添加菜单分割线 edit.addSeparator(); edit.add(copyItem); edit.add(pasteItem); //为format菜单添加菜单项 format.add(commonItem); format.add(cancelItem); //使用new MenuItem("-")添加菜单分割线 edit.add(new MenuItem("-")); //将format菜单组合到edit菜单中,从而构成2级菜单 edit.add(format); //将file edit 菜单加到mb菜单条中 mb.add(edit); mb.add(file); //为f窗口设置菜单条 f.setMenuBar(mb); //以匿名内部类的情势创建监听器对象 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); f.add(ta); f.pack(); f.setVisible(true); } public static void main(String[] args){ new SimpleMenu().init(); } }

AWT菜单组件不能创建图标菜单,如果希望创建带图标的菜单,则应当使用Swing的菜单组件:JMenuBar,JMenu JMenuItem JpopupMenu Swing的菜单组件和AWT菜单组件基本类似。

——————————————————————————————————————————————————————————————————————–
右键菜单:
(1)右键菜单使用PopupMenu对象表示,创建右键菜单步骤以下:
创建PopupMenu的实例
创建多个menuItem实例,顺次将这些实例加入PopupMenu中
将PopupMenu加入到目标组件中
为需要出现上下文菜单的组件编写鼠标监听器,当用户释放鼠标右键时弹出右键菜单。

示例程序:

————————————————————————————————————————————————————————
在AWT中绘图:
画图的实现原理:
(1)在Component类里提供了以下和绘图有关的方法:
paint(Graphics g)绘制组件的外观
update(Graphics g) 调用paint()方法,刷新组件外观
repaint();调用update()方法,刷新组件外观。
上面3个方法的调用关系为:repaint()调用update()方法,update()方法调用paint()方法。

(2)Container类里的update()方法先以组件的背风景填充全部组件区域,然后调用paint()方法重画组件。
——————————————————————————————————————————————————————
使用Graphics类
(1)Graphics是1个抽象的画笔对象,Graphics可以在组件上绘制丰富多彩的几何图形和位图,其提供的方法以下
drawLine() 绘制直线
drawString()绘制字符串
drawRect()绘制矩形
drawRoundRect()绘制圆角矩形
drawOval()绘制椭圆形状
drawPolygon()绘制多边形边框
drawArc()绘制1段圆弧
drawPolyline()绘制折线

fillRect()填充矩形
fillRoundRect()填充圆角矩形
fillOval()填充椭圆形状
fillPolygon()填充多边形
fillArc()填充圆弧两个端点到中心连线所包围的区域

drawImage()绘制位图

除此以外,Graphics还提供了setColor()和setFont()两个方法来设置画笔的色彩和字体。

(2)AWT专门提供了1个Canvas类作为绘图的画布,程序可以通过创建Canvas的子类,并重写它的paint()方法来实现绘图。
示例:简单的绘图程序

import java.awt.BorderLayout; import java.awt.Button; import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Frame; import java.awt.Graphics; import java.awt.Panel; import java.util.Random; public class SimpleDraw{ private final String RECT_SHAPE="rect"; private final String OVAL_SHAPE="oval"; private Frame f=new Frame("简单绘图"); private Button rect=new Button("绘制矩形"); private Button oval=new Button("绘制圆形"); private MyCanvas drawArea =new MyCanvas(); //用来保存需要绘制甚么图形的变量 private String shape=""; public void init() { Panel p=new Panel(); rect.addActionListener(e -> { //设置shape变量为RECT_SHAPE shape=RECT_SHAPE; //重画MyCanvas对象,即调用它的repait()方法 drawArea.repaint(); } ); oval.addActionListener(e -> { //设置shape变量为OVAL_SHAPE shape=OVAL_SHAPE; //重画MyCanvas对象,即调用它的repait()方法 drawArea.repaint(); } ); p.add(rect); p.add(oval); drawArea.setPreferredSize(new Dimension(250,180)); f.add(drawArea); f.add(p, BorderLayout.SOUTH); f.pack(); f.setVisible(true); } public static void main(String[] args){ new SimpleDraw().init(); } class MyCanvas extends Canvas{ //重写Canvas的paint()方法,实现绘画 public void paint(Graphics g){ Random rand=new Random(); if(shape.equals(RECT_SHAPE)){ //设置画笔色彩 g.setColor(new Color(220, 100, 80)); //随机画1个矩形块 g.drawRect(rand.nextInt(200), rand.nextInt(120), 40, 60); } if(shape.equals(OVAL_SHAPE)){ //设置画笔色彩 g.setColor(new Color(220, 100, 80)); g.fillOval(rand.nextInt(200), rand.nextInt(120), 50, 40); } } } }

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐