高级AWT组件的使用

1,Font

package GUI;

import java.awt.BorderLayout;
import java.awt.Choice;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

/*1,继承Frame是有用的,我们想用到一个Frame,把结果放在frame里,当然是可以直接像前面的代码那样
 * Frame f;然后f.add(...)向Frame里添加组件,本程序用了一种新的方式,继承Frame然后在构造函数里面完成
 * 这个任务。
 * 2,关于this和super在构造函数里的用法还要看一遍*/
public class FontExample extends Frame implements ItemListener {

	Choice chFont,chStyle,chSize;
	Label l;
	String fontName[] = {"dialog","dialoginput","serif","sansserif","monospaced"};
	int fontStyle[] = {Font.PLAIN,Font.BOLD,Font.ITALIC,Font.BOLD|Font.ITALIC};
	
	//main函数
	public static void main(String[] args) {
		
		new FontExample();
	}
	
	//构造方法
	public FontExample()
	{
		//调用父类的构造函数,等价于Frame f = new Frame("Font Example"),实际上就产生了一个Frame对象
		//这个对象没有名字
		super("Font Example");
		
		//字名
		chFont = new Choice();
		for(int i = 0;i < fontName.length;i ++)
			chFont.add(fontName[i]);
		
		//字体
		chStyle = new Choice();
		chStyle.add("标准");
		chStyle.add("加粗");
		chStyle.add("斜体");
		chStyle.add("粗斜体");
		
		//大小
		chSize = new Choice();
		for(int i =8;i < 72;i = i+2)
			chSize.add(Integer.toString(i));
		
		chFont.addItemListener(this);
		chStyle.addItemListener(this);
		chSize.addItemListener(this);
		
		//把这三个选项放入一个一行三列的Panel对象里
		Panel p = new Panel(new GridLayout(1,3));
		p.add(chFont);
		p.add(chStyle);
		p.add(chSize);
		
		//产生一个Label对象
		l = new Label("AWT Font Test");
		
		//在调用当前Frame对象的方法,为什么加上this和super都可以?????
		add(p,BorderLayout.NORTH);
		add(l,BorderLayout.CENTER);
		pack();
		setVisible(true);		
	}
	
	
	//事件响应
	public void itemStateChanged(ItemEvent e) {
		
		String name = chFont.getSelectedItem();
		int style = fontStyle[chStyle.getSelectedIndex()];
		int size = Integer.parseInt(chSize.getSelectedItem());
		
		Font f = new Font(name,style,size);//通过事件响应获取Font对象,Font对象的三个参数
		
		l.setFont(f);//设置Label的Font样式
		pack();

	}
}

2,Color

package GUI;

import java.awt.*;
import java.awt.event.*;

public class ColorExample extends Frame implements AdjustmentListener
{
	Scrollbar red, green, blue;//三个滚动条对象
	Checkbox fore, back;//前景和背景选择对象
	CheckboxGroup cg;
	Label l;//一个Label对象放文字
	
	
	public static void main(String argv[])
	{
		new ColorExample();
	}
	
	
	public ColorExample()
	{
		super("Color Example");//生成一个Frame对象,注意extends Frame!!!
		
		//滚动条的构造方法,设置水平,滚动条初始值,滚动一次卷多少值,滚动最小,最大值
		red = new Scrollbar(Scrollbar.HORIZONTAL, 0 ,10, 0, 255);
		green = new Scrollbar(Scrollbar.HORIZONTAL, 0 ,10, 0, 255);
		blue = new Scrollbar(Scrollbar.HORIZONTAL, 0 ,10, 0, 255);
		red.addAdjustmentListener(this);
		green.addAdjustmentListener(this);
		blue.addAdjustmentListener(this);
		
		Panel p1 = new Panel(new GridLayout(3, 2));//p1来放滚动条,3行2列按行顺序放
		p1.add(new Label("红色值:"));
		p1.add(red);
		p1.add(new Label("绿色值:"));
		p1.add(green);
		p1.add(new Label("蓝色值:"));
		p1.add(blue);
		
		cg = new CheckboxGroup();//用Group实现同时只能单选
		fore = new Checkbox("前景颜色", cg, true);
		back = new Checkbox("背景颜色", cg, false);
		
		Panel p2 = new Panel();//p2来放前景背景选择
		p2.add(fore);
		p2.add(back);
		
		l = new Label("Color Test");//l放测试的label
		l.setFont(new Font("dialog", Font.BOLD, 24));
		
		add(p1, BorderLayout.NORTH);
		add(l, BorderLayout.CENTER);
		add(p2, BorderLayout.SOUTH);
		pack();
		setVisible(true);
	}

	
	public void adjustmentValueChanged(AdjustmentEvent e) 
	{
		
		int r = red.getValue();
		int g = green.getValue();
		int b = blue.getValue();

		if (fore.getState())
			l.setForeground(new Color(r, g, b));//设置前景颜色
		else
			l.setBackground(new Color(r, g, b));
	}
}

3,Menu

package GUI;

import java.awt.*;
import java.awt.event.*;

/*1,菜单架构中最上层的是菜单栏MenuBar,一个Frame窗口只能有一个MenuBar,使用Frame类的setMenuBar()
 * 来指定要使用的MenuBar对象。
 * 2,每个菜单栏可以包含好几个不同的菜单Menu类,在Menu里可以有菜单选项MenuItem,
 * 分割线,甚至另一个菜单。
 * 3除了一般的菜单选项MenuItem外,还有另一种具有复选框的菜单选项CheckboxMenuItem
 * 这个类。
 * 4另外还可以使用MenuShortcut类来使用快捷键选择菜单选项。
 * 5,最后,还有鼠标右击产生的快捷菜单PopupMenu类*/

public class MenuExample extends MouseAdapter implements ActionListener, ItemListener
{
	Frame f;
	Label l;
	PopupMenu pm;
	
	
	public static void main(String argv[])
	{
		new MenuExample();
	}
	
	
	public MenuExample()
	{
		f = new Frame("Menu Example");
		f.addMouseListener(this);//要注册f,因为显示快捷菜单的时候要根据鼠标点击位置获取f内的坐标
		
		//菜单Menu item1 ,是一个嵌套的menu,它又作为Menu menu1的一个菜单选项(注意菜单和菜单选项的区别)
		MenuItem item1_1 = new MenuItem("Item1_1");
		MenuItem item1_2 = new MenuItem("Item1_2");
		MenuItem item1_3 = new MenuItem("Item1_3");
		item1_1.addActionListener(this);
		item1_2.addActionListener(this);
		item1_3.addActionListener(this);
		
		Menu item1 = new Menu("Item1", false);
		item1.add(item1_1);
		item1.add(item1_2);
		item1.add(item1_3);
		
		//带快捷键的菜单选项MenuItem item2 
		MenuShortcut ms = new MenuShortcut(KeyEvent.VK_A, false);
		MenuItem item2 = new MenuItem("Item2", ms);
		item2.addActionListener(this);
		
		//复选菜单选项CheckboxMenuItem item3
		CheckboxMenuItem item3 = new CheckboxMenuItem("Item3");
		item3.addItemListener(this);
		
		//将以上三个菜单选项加入菜单Menu menu1中(其中菜单选项item1本身又是一个菜单)
		Menu menu1 = new Menu("Menu1");
		menu1.add(item1);//
		menu1.add(item2);
		menu1.addSeparator();//分割线
		menu1.add(item3);
		
		//另一个菜单Menu help,实现同上
		Menu help = new Menu("Help");
		MenuItem help1 = new MenuItem("Index");
		MenuItem help2 = new MenuItem("About");
		help1.addActionListener(this);
		help2.addActionListener(this);
		help.add(help1);
		help.addSeparator();
		help.add(help2);
		
		//点击鼠标所产生的快捷菜单pm
		MenuItem popup1 = new MenuItem("popup1");
		MenuItem popup2 = new MenuItem("popup2");
		popup1.addActionListener(this);
		popup2.addActionListener(this);
		
		pm = new PopupMenu();
		pm.add(popup1);
		pm.add(popup2);

		//架构最上层的菜单栏MenuBar mb,分别将menu1和help放入菜单栏
		MenuBar mb = new MenuBar();
		mb.add(menu1);
		mb.setHelpMenu(help);//和mb.add(help)效果一样;
		
		////设置f的菜单栏,一个显示文字的label和一个快捷菜单pm
		f.setMenuBar(mb);
		l = new Label("No menu item selected!");
		f.add(pm);
		f.add(l, BorderLayout.NORTH);
		f.setSize(200,100);
		f.setVisible(true);
	}
		
	
	//单选菜单选项和复选菜单选项的处理不一样,一个是actionPerformed一个是itemStateChanged
	public void actionPerformed(ActionEvent e)
	{
		MenuItem mi = (MenuItem)e.getSource();
		l.setText(mi.getLabel()+" selected!");
	}
		
	public void itemStateChanged(ItemEvent e)
	{
		CheckboxMenuItem cmi = (CheckboxMenuItem)e.getSource();
		l.setText(cmi.getLabel()+" selected!");
	}
		
	//鼠标事件产生快捷菜单pm
	public void mouseClicked(MouseEvent e)
	{
		pm.show(f, e.getX(), e.getY());//在f里指定坐标处显示快捷菜单PopupMenu
	}
	
}

4,Dialog

package GUI;

import java.awt.*;
import java.awt.event.*;

/*在之前的程序中我们一直使用了Frame类,其实继承了window类的除了Frame以外,还有另一个类也是继承自windows
 * 类的,它就是Dialog类,用来报告消息。
 * 基本上Dialog对象是不能单独存在的,它一定得伴随某个Frame或者Dialog对象才行
 * Dialog的构造函数有三个参数,第一个指定伴随的Frame或者Dialog对象,第二个可以指定此Dialog自己的标题,第
 * 三个指定显示模式 */
public class DialogExample extends WindowAdapter implements ActionListener
{
	Frame f;
	Dialog d;
	Checkbox ch;
	Button b;
	
	public static void main(String argv[])
	{
		new DialogExample();
	}
	
	public DialogExample()
	{
		f = new Frame("Dialog Example");
		
		ch = new Checkbox("Modal");

		b = new Button("Show Dialog");
		b.addActionListener(this);
		
		f.add(ch, BorderLayout.NORTH);
		f.add(b, BorderLayout.CENTER);
		f.pack();
		f.setVisible(true);
	}
	
	public void actionPerformed(ActionEvent e)
	{
		d = new Dialog(f, "I'm a Dialog", ch.getState());//Dialog构造函数的参数
		d.addWindowListener(this);//为Dialog添加WindowListener监听实现Dialog窗口关闭
		d.setSize(100,100);
		b.setEnabled(false);//产生Dialog后,button就失效
		d.show();
	}

	public void windowClosing(WindowEvent e)
	{
		d.dispose();
		b.setEnabled(true);
	}
}

5,FileDialog

package GUI;

import java.awt.*;
import java.awt.event.*;

/*1,在AWT包中只提供了一种系统对话框,就是FileDialog类,它会产生打开或保存文件的对话框让你选择系统中的某个
 * 文件,在后面我们将继续介绍一组名为Swing德组件,在Swing包里的JDialog提供了更为丰富的对话框种类
 * 2,其实LOAD和SAVE模式只有对话框上文字显示的区别,FileDialog对象只是用来选择文件路径和名称而已,并不对
 * 文件作什么实际的访问动作,!!!!对文件处理是有文件处理的类来完成的。可以由FileDialog对象返回路径名称给
 * 文件处理的相关类,然后来决定怎么去操作。*/

public class FileDialogExample implements ActionListener
{
	Frame f;
	FileDialog fd;
	Checkbox chLoad, chSave;
	CheckboxGroup cg;
	Button b;
	Label lbDir, lbFile;
	
	public static void main(String arv[])
	{
		new FileDialogExample();
	}
	
	public FileDialogExample()
	{
		f = new Frame("FileDialog Example");
		fd = new FileDialog(f);
		
		cg = new CheckboxGroup();
		chLoad = new Checkbox("LOAD", true, cg);
		chSave = new Checkbox("SAVE", false, cg);
		
		Panel p1 = new Panel();
		p1.add(chLoad);
		p1.add(chSave);
		
		lbDir = new Label("Directory: ");
		lbFile = new Label("File Name: ");
		
		Panel p2 = new Panel(new GridLayout(2,1));
		p2.add(lbDir);
		p2.add(lbFile);
		
		b = new Button("Show");
		b.addActionListener(this);
		
		f.add(p1, BorderLayout.NORTH);
		f.add(p2, BorderLayout.CENTER);
		f.add(b, BorderLayout.SOUTH);
		f.pack();
		f.setVisible(true);
	}

	public void actionPerformed(ActionEvent e)
	{
		if (chLoad.getState())
			fd.setMode(FileDialog.LOAD);
		else
			fd.setMode(FileDialog.SAVE);
		
		fd.show();//显示FileDialog对话框
		
		lbDir.setText("Directory: "+fd.getDirectory());//从fd对象获取选中的文件信息
		lbFile.setText("File Name: "+fd.getFile());
		f.pack();
	}
}

posted @ 2011-03-29 21:07  jinmengzhe  阅读(960)  评论(0编辑  收藏  举报