java基础(十六)-----GUI基础②

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:文本框。
代码示例:
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,创建对话框的时候需要指定对话框的模式:
如果指定的是模式对话框,只有当对话框取消后,父窗口才会获得焦点。

文件对话框(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事件处理机制:事件源将事件以委托的形式传给事件监听器,由事件监听器处理事件。

事件监听器

提供事件监听和处理的一系列的类。

事件适配器

继承了监听器接口,空事先接口中的方法。

菜单

菜单有下面几部分组成:
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方法,刷新组建外观。

代码示例:
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的实现类,用于传输文本字符串。
代码示例:
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();
		
	}
	
	
	

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值