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
文章列表