AWT菜单:

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

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

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

(4)创建了MenuItem Menu MenuBar 对象之后,调用Menu的add()方法将多个MenuItem组合成菜单(也可以将另一个Menu菜单组合进来,从而形成二级菜单),在调用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菜单中,从而形成二级菜单
           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()方法,刷新组件外观。
上面三个方法的调用关系为:repaint()调用update()方法,update()方法调用paint()方法。

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

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

drawImage()绘制位图

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

(2)AWT专门提供了一个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));
                     //随机画一个矩形块
                     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);
                }
           }
     }


}





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值