AWT常用组件
1,按钮:Button
2,用户绘图的桌布:Canvas
3,复(单)选框组件:Checkbox
4,CheckboxGrooup:用于将多个Checkbox组件组合在一起,
一组Checkbox只有一个可以被选中。
5,Choice:下拉式选择框组件
6,Frame,窗口
7,Label:标签
8,List:列表框组件,可以添加多条项目。
9,Panel,容器,不能独立存在
10,ScrollPane:滚动条。可以容纳其他组件。
11,TextArea:文本域
12,TextField:文本框。
2,用户绘图的桌布:Canvas
3,复(单)选框组件:Checkbox
4,CheckboxGrooup:用于将多个Checkbox组件组合在一起,
一组Checkbox只有一个可以被选中。
5,Choice:下拉式选择框组件
6,Frame,窗口
7,Label:标签
8,List:列表框组件,可以添加多条项目。
9,Panel,容器,不能独立存在
10,ScrollPane:滚动条。可以容纳其他组件。
11,TextArea:文本域
12,TextField:文本框。
代码示例:
package com.test;
import java.awt.BorderLayout;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Choice;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.List;
import java.awt.Panel;
import java.awt.TextField;
import javax.swing.Box;
import javax.swing.BoxLayout;
public class CommonComponentDenmo extends Frame {
Label name= new Label("姓名");
TextField tf= new TextField(10);
Label sex= new Label("性别");
CheckboxGroup cbg= new CheckboxGroup();
Checkbox male = new Checkbox("男",cbg,true);
Checkbox female = new Checkbox("女",cbg,false);
Label age = new Label("年龄");
Choice age2=new Choice();
Label married =new Label("是否已婚");
Checkbox married2=new Checkbox("是否已婚?",false);
Label color =new Label("喜欢的颜色");
Choice colorList=new Choice();
public void init()
{
Panel p1= new Panel();
Panel p2= new Panel();
Panel p3= new Panel();
Panel p4= new Panel();
Panel p5= new Panel();
p1.add(name);
p1.add(tf);
p2.add(sex);
p2.add(male);
p2.add(female);
p3.add(age);
p3.add(age2);
p4.add(married);
p4.add(married2);
p5.add(color);
p5.add(colorList);
age2.add("19");
age2.add("20");
age2.add("21");
age2.add("22");
age2.add("23");
colorList.add("红色");
colorList.add("蓝色");
colorList.add("绿色");
Box topLeft=Box.createVerticalBox();
topLeft.add(p1);
topLeft.add(p2);
topLeft.add(p3);
topLeft.add(p4);
topLeft.add(p5);
this.add(topLeft);
this.setVisible(true);
}
public static void main(String[] args) {
new CommonComponentDenmo().init();
}
}
对话框(Dialog)
Dialog与Frame都是Window类的子类,是一种顶级容器类,可以独立存在。用法与
Frame相同,不过有两点注意:
1,对话框必须依赖父窗口。
2,创建对话框的时候需要指定对话框的模式:
如果指定的是模式对话框,只有当对话框取消后,父窗口才会获得焦点。
Frame相同,不过有两点注意:
1,对话框必须依赖父窗口。
2,创建对话框的时候需要指定对话框的模式:
如果指定的是模式对话框,只有当对话框取消后,父窗口才会获得焦点。
文件对话框(FileDialog)
文件对话框是Dialog的子类,用于打开或者保存文件。该类的构造函数有三个参数:parent,title,mode.mode用来指定文件对话框是保存文件还是打开文件。
代码示例:
package com.test;
import java.awt.Button;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
public class DialogDemo extends Frame {
Button open= new Button("打来文件");
Button save= new Button("保存文件");
FileDialog openFile= new FileDialog(this,"打开文件",FileDialog.LOAD);
FileDialog saveFile= new FileDialog(this,"保存文件",FileDialog.SAVE);
public void init()
{
Box box= Box.createVerticalBox();
box.add(open);
box.add(save);
open.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
openFile.setVisible(true);
String filename=openFile.getDirectory()+openFile.getFile();
System.out.println(filename);
}
});
save.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
saveFile.setVisible(true);
}
});
this.add(box);
this.pack();
this.setVisible(true);
}
public static void main(String[] args) {
new DialogDemo().init();
}
}
事件处理
事件处理主要涉及三个类:事件源(EventSource),事件(Event),监听器(EventListner)。
AWT事件处理机制:事件源将事件以委托的形式传给事件监听器,由事件监听器处理事件。
AWT事件处理机制:事件源将事件以委托的形式传给事件监听器,由事件监听器处理事件。
事件监听器
提供事件监听和处理的一系列的类。
事件适配器
继承了监听器接口,空事先接口中的方法。
菜单
菜单有下面几部分组成:
MenuBar:菜单条,菜单的容器,用来容纳菜单。
Menu:菜单组件,菜单项的容器。
PopupMenu:右键菜单组件
MenuItem:菜单项
CheckboxMenuItem:复选框菜单组件
MenuShortcut:菜单快捷键
MenuBar:菜单条,菜单的容器,用来容纳菜单。
Menu:菜单组件,菜单项的容器。
PopupMenu:右键菜单组件
MenuItem:菜单项
CheckboxMenuItem:复选框菜单组件
MenuShortcut:菜单快捷键
代码示例:
package com.test;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.ScrollPane;
import java.awt.TextArea;
public class MeneDemo extends Frame {
public void init()
{
MenuBar bar=new MenuBar();
String[] menuNames={"文件","编辑","格式"};
String[][] menuitemNames={{"打开","-","保存","-","退出"},{"自动换行","-","大字体","-","小字体"},{"多行","-","关于"}};
for(int i=0;i<menuitemNames.length;i++)
{
Menu menu =new Menu(menuNames[i]);
for(int j=0;j<menuitemNames[i].length;j++)
{
if(menuitemNames[i][j].equals("-"))
{
menu.addSeparator();
}else
{
MenuItem item=new MenuItem(menuitemNames[i][j]);
menu.add(item);
}
bar.add(menu);
}
}
this.setMenuBar(bar);
PopupMenu pop=new PopupMenu();
MenuItem copy=new MenuItem("复制");
MenuItem paste=new MenuItem("粘贴");
MenuItem save=new MenuItem("保存");
MenuItem saveAs=new MenuItem("另存为");
this.add(pop);
ScrollPane pane =new ScrollPane();
pane.add(new TextArea());
this.add(pane,BorderLayout.CENTER);
this.setVisible(true);
}
public static void main(String[] args) {
new MeneDemo().init();
}
}
在AWT中绘图
在component类中提供了三个与绘图相关的方法。
paint(Graphics g);绘制组件的外观
update(Graphics g);调用paint方法,刷新组建外观
reapint(Graphics g);调用update方法,刷新组建外观。
paint(Graphics g);绘制组件的外观
update(Graphics g);调用paint方法,刷新组建外观
reapint(Graphics g);调用update方法,刷新组建外观。
代码示例:
package com.test;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class DrawDemo extends Frame {
private String shape="";
Button rec =new Button("绘制矩形");
Button ova =new Button("绘制圆形");
DrawCanvas mycanvas =new DrawCanvas();
public void init()
{
this.add(mycanvas,BorderLayout.CENTER);
Panel p =new Panel();
p.add(rec);
p.add(ova);
this.add(p,BorderLayout.SOUTH);
rec.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
shape="RECT";
mycanvas.repaint();
}
});
ova.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
shape="OVAL";
mycanvas.repaint();
}
});
this.setPreferredSize(new Dimension(200,120));
this.pack();
this.setVisible(true);
}
public static void main(String[] args) {
new DrawDemo().init();
}
class DrawCanvas extends Canvas
{
public void paint(Graphics g)
{
Random random = new Random();
if(shape.equals("RECT"))
{
g.drawRect(random.nextInt(120),random.nextInt(120), 60, 40);
}
if(shape.equals("OVAL"))
{
g.drawOval(random.nextInt(120), random.nextInt(120), 60, 60);
}
}
}
}
剪贴板
剪贴板可以将要复制的数据以原有的格式复制到其他地方。
AWT提供了两种剪贴板:①系统剪贴板:与平台无关
②本地剪贴板:与平台有关
与数据传输相关的类:
Clipboard:代表一个剪贴板实例,可以是本地剪贴板也可是系统剪贴板。
Transferable:该实例代表放进剪贴板的传输对象。
DataFlavor:用于表述剪贴板的数据格式
StringSelection:Transferable的实现类,用于传输文本字符串。
AWT提供了两种剪贴板:①系统剪贴板:与平台无关
②本地剪贴板:与平台有关
与数据传输相关的类:
Clipboard:代表一个剪贴板实例,可以是本地剪贴板也可是系统剪贴板。
Transferable:该实例代表放进剪贴板的传输对象。
DataFlavor:用于表述剪贴板的数据格式
StringSelection:Transferable的实现类,用于传输文本字符串。
代码示例:
package com.test;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
public class ClipBoardDemo extends Frame {
private Clipboard clipboard=Toolkit.getDefaultToolkit().getSystemClipboard();
private TextArea ta1= new TextArea(5,20);
private TextArea ta2= new TextArea(5,20);
private Button bt1 =new Button("复制");
private Button bt2 =new Button("粘贴");
public void init()
{
Panel p =new Panel();
p.add(bt1);
p.add(bt2);
bt1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
StringSelection s= new StringSelection(ta1.getSelectedText());
clipboard.setContents(s, null);
}
});
bt2.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
if(clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor))
{
try
{
String s = (String)clipboard.getData(DataFlavor.stringFlavor);
ta2.append(s);
}catch(Exception w)
{
w.printStackTrace();
}
}
}
});
Box box=Box.createHorizontalBox();
box.add(ta1);
box.add(ta2);
this.add(box,BorderLayout.CENTER);
this.add(p,BorderLayout.SOUTH);
this.setVisible(true);
}
public static void main(String[] args) {
new ClipBoardDemo().init();
}
}