文章出處

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);                }           }     }}

就愛閱讀www.92to.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20161116/53964.html

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()