高级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();



	}

}

高级AWT组件的使用

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

	}

}

高级AWT组件的使用

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

	}

	

}

高级AWT组件的使用

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

	}

}

高级AWT组件的使用

高级AWT组件的使用

你可能感兴趣的:(awt)