AWT组件的使用

1,Button

package GUI;

import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/*组件的使用,Button
 * 前面讲过,也是向自己注册*/
public class ButtonExample implements ActionListener{
	
	Frame f;
	Button b1,b2;//这里的b1,b2是一个Button对象,区别于下面的字符串b1,b2代表的事件Action对应的字符串表示
	
	// ActionListener中的事件处理方法
	public void actionPerformed(ActionEvent e) {
		
		String cmd = e.getActionCommand();
		if(cmd.equals("b1"))
			b2.setEnabled(!b2.isEnabled());
		else b1.setEnabled(!b1.isEnabled());
	}
	
	//构造函数
	public ButtonExample(){
		
		f = new Frame("Button Example");
		f.setLayout(new GridLayout(1,2));
		
		b1 = new Button("Left");
		b1.setActionCommand("b1");//用字符串“b1”来表示Button b1上的事件响应
		b1.addActionListener(this);//每个组件都要注册listener
		
		b2 = new Button("Right");
		b2.setActionCommand("b2");
		b2.addActionListener(this);
		
		f.add(b1);
		f.add(b2);
		f.pack();
		f.setVisible(true);
	}
	
	//main函数
	public static void main(String[] args) {
		
		new ButtonExample();

	}

}

2,Checkbox

1)多重选择

package GUI;

import java.awt.Checkbox;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

/*Checkbox之多重选择,实现ItemListener*/
public class CheckboxExample implements ItemListener {
	
	Frame f;
	Checkbox cb[] = new Checkbox[3];//Checkbox类型数组
	
	//ItemListener中的事件处理方法
	public void itemStateChanged(ItemEvent e) {
		
		Checkbox ch = (Checkbox) e.getSource();//事件来源的对象,为Checkbox类型
		String label = ch.getLabel();//去的来源Checkbox的标题
		
		if(e.getStateChange() == ItemEvent.SELECTED)//ItemEvent.SELECTED应该是个常量,表示选中
			System.out.println(label + "  selected");
		else System.out.println(label + "  deselected");
	}
	
	//构造函数
	public CheckboxExample()
	{
		f = new Frame("Checkbox Example");
		f.setLayout(new GridLayout(3,1));
		
		//三种初始化checkbox的方法
		cb[0] = new Checkbox("Item 1");
		cb[1] = new Checkbox("Item 2",true);//默认选中
		cb[2] = new Checkbox();
		cb[2].setLabel("Item 3");
		
		for (int i = 0; i < 3; i ++)
		{
			cb[i].addItemListener(this);//为每个添加监听器
			f.add(cb[i]);//将每个添加到f中
		}
		
		f.pack();
		f.setVisible(true);
	}
	
	//main函数
	public static void main(String[] args) {
		
		new CheckboxExample();
	}
}

2)单一选择

package GUI;

import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Frame;
import java.awt.GridLayout;

/*1,CheckboxGroup类用来实现单一选择,一个CheckboxGroup对象中可以包含好几个Checkbox对象,
 * 但是在同一个CheckboxGroup里,同一时间内只会有一个Checkbox对象被选中,就是这样来实现
 * 单一选择的。
 * 2,这里没有去实现处理事件,可以看到,import里并没有导入java.awt.event.*,CheckboxGroupExample
 * 后面也没有去implements事件处理的接口*/
public class CheckboxGroupExample {

	Frame f;
	Checkbox cb[] = new Checkbox[4];//包含四个Checkbox的数组
	CheckboxGroup cbg1,cbg2;//2个CheckboxGroup
	
	public static void main(String[] args) {
		
		new CheckboxGroupExample();
	}
	
	public CheckboxGroupExample()
	{
		f = new Frame("CheckboxGroup Example");
		f.setLayout(new GridLayout(4,1));
		
		cbg1 = new CheckboxGroup();
		cbg2 = new CheckboxGroup();
		
		cb[0] = new Checkbox("Item 1");
		cb[1] = new Checkbox("Item 2");
		//cb[0]和cb[1]放入cbg1中
		cb[0].setCheckboxGroup(cbg1);
		cb[1].setCheckboxGroup(cbg1);
		
		//另一种方式将cb[2],cb[3]放入cbg2中,在初始化的时候定义它所在的group
		cb[2] = new Checkbox("Item 3",cbg2,true);
		cb[3] = new Checkbox("Item 4",cbg2,false);
		
		for(int i = 0; i < 4; i ++)
		{
			f.add(cb[i]);//别忘了放入f中
		}
		
		f.pack();
		f.setVisible(true);
	}
}

3,Choice

package GUI;

import java.awt.BorderLayout;
import java.awt.Choice;
import java.awt.Frame;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

/*Choice下拉式菜单,产生Choice对象,向Choice里添加选项,检查哪个选项被选择,
 * 侦测Choice的是ItemListener,必须向它注册,并实现里面的itemStateChanged方法*/
public class ChoiceExample implements ItemListener {
	
	Frame f;
	Choice ch;//声明Choice对象
	
	//事件的方法
	public void itemStateChanged(ItemEvent e) {
		
		Choice c = (Choice) e.getSource();
		
		System.out.println("selected item index: " + c.getSelectedIndex());
		System.out.println("selected item: " + c.getSelectedItem());
	}

	//main函数,main函数传参方式
	public static void main(String[] args) {
		
		new ChoiceExample(args);
	}
	
	//把初始化放在构造函数里
	public ChoiceExample(String[] args)
	{
		f = new Frame("Choice Example");
		ch = new Choice();//产生Choice对象,注意不要光声明没有指向对象
		ch.addItemListener(this);//添加自己这个实现了ItemListener接口的类,注意整个ch添加一个
		
		for (int i = 0; i < args.length; i++)
			ch.add(args[i]);//向ch添加选项,从命令行参数里
		
		f.add(ch,BorderLayout.NORTH);
		f.pack();
		f.setVisible(true);
		
		System.out.println("Totla  " + ch.getItemCount() + " items.");
	}
}

4,List

package GUI;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.List;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

//用List实现多选列表
public class ListExample implements ItemListener
{

	Frame f;
	List ls;
	
	public static void main(String[] args) {
		
		new ListExample(args);
	}
	
	public ListExample(String args[])
	{
		f = new Frame("list example");
		//前两个参数是同时要显示的选项数和要不要使用多选,注意都是以String类型传入的,要转换类型
		//注意List的这种构造方法
		ls = new List(Integer.parseInt(args[0]),Boolean.valueOf(args[1]).booleanValue());
		ls.addItemListener(this);
		
		for(int i = 2;i < args.length;i ++)//从第三项才是选项
			ls.add(args[i]);
		
		f.add(ls,BorderLayout.CENTER);
		f.pack();
		f.setVisible(true);
		
		System.out.println("Total  " + ls.getItemCount() + "Items");
	}

	public void itemStateChanged(ItemEvent e) {
		// TODO Auto-generated method stub
		List l = (List) e.getSource();
		int index[] = l.getSelectedIndexes();
		String str[] = l.getSelectedItems();
		
		for(int i = 0;i < index.length;i ++)
		{
			System.out.println(index[i] + "  " + str[i]);
		}	
	}

}

5,Label

package GUI;

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

/*注意别导入了xml里面的label*/
//将信息显示在label组件上
public class LabelExample implements ItemListener {

	Frame f;
	Choice ch;
	Label result;//声明一个lable对象
	
	//事件处理
	public void itemStateChanged(ItemEvent e) {
		
		Choice c = (Choice) e.getSource();
		String str = c.getSelectedItem() + " Selected";
		
		result.setText(str);//实现两个不同组件的交互,将str加到result对象中,每次清除上一次的text内容
	}

	//构造函数
	public LabelExample(String args[])
	{
		f = new Frame("lable example");
		result = new Label("no item selected");
		
		ch = new Choice();
		ch.addItemListener(this);
		
		for(int i = 0;i< args.length;i ++)
		{
			ch.add(args[i]);
		}
		
		f.add(ch,BorderLayout.NORTH);
		f.add(result,BorderLayout.SOUTH);
		f.pack();
		f.setVisible(true);
		
		System.out.println("Total " + ch.getItemCount() + " items");
	}
	
	//main函数
	public static void main(String[] args) {
		
		new LabelExample(args);
	}
}

6,Scrollbar

package GUI;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.Scrollbar;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;

/*Scrollbar实现滚动条,实现AdjustmentListener接口*/
public class ScrollbarExample implements AdjustmentListener {

	Frame f;
	Button btn;
	Panel p;//注意p和f的差别
	Scrollbar HSB,VSB;
	int x = 0,y = 0;
	
	public static void main(String[] args) {
		
		new ScrollbarExample();

	}
	
	//构造函数
	public ScrollbarExample()
	{
		f = new Frame("scrollbar example");
		p = new Panel(null);//p的构造函数
		
		btn = new Button("button");
		btn.setSize(50, 20);
		btn.setLocation(x, y);
		
		//Scrollbar对象的构造方法
		HSB = new Scrollbar(Scrollbar.HORIZONTAL,0,10,0,200);
		VSB = new Scrollbar(Scrollbar.VERTICAL,0,10,0,200);
		HSB.addAdjustmentListener(this);
		VSB.addAdjustmentListener(this);
		
		//这里不要掉了,要把btn加到p上,p加到f上,顺序先后都行
		p.add(btn);
		f.add(p,BorderLayout.CENTER);
		
		f.add(HSB,BorderLayout.SOUTH);
		f.add(VSB,BorderLayout.EAST);
		
		f.setSize(250,250);
		f.setVisible(true);
	}
	
	//事件处理
	public void adjustmentValueChanged(AdjustmentEvent e) {
		
		Scrollbar sb = (Scrollbar) e.getSource();
		
		if(sb.getOrientation() == Scrollbar.HORIZONTAL)//getOrientation()取得滚动条的种类
			x = sb.getValue();
		else y = sb.getValue();
		
		btn.setLocation(x, y);//设置新的btn位置
	}

}

7,ScrollPane

package GUI;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.ScrollPane;

/*ScrollPane实现自行决定是否产生滚动条。先把组件加到Panel中,然后再把Panel加到ScrollPane中
 * ,这样一样当Panel比ScrollPane大时,ScrollPane就会自动产生滚动条给我们使用*/
public class ScrollPaneExample {

	
	public static void main(String[] args) {
		
		Frame f = new Frame("ScrollPane Example");
		
		int n = Integer.parseInt(args[0]);
		
		Panel p = new Panel (new FlowLayout());//注意Panel的构造方法
		
		Button btn[] = new Button[n];
		for (int i = 0;i < n;i ++)
		{
			btn[i] = new Button("Button " + i);
			p.add(btn[i]);//先把组件加到Panel上
		}
		
		ScrollPane sp = new ScrollPane(ScrollPane.SCROLLBARS_AS_NEEDED);//注意ScrollPane的构造方法和参数
		
		sp.add(p);//再将Panel加到ScrollPane上,当Panel比ScrollPane大时,就有自动产生的效果
		f.add(sp);//最后把ScrollPane加到Frame上
		f.pack();
		f.setVisible(true);
	}

}

8,TextField

package GUI;

import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;

/*用TextField 实现文字在TextField组件里输入,并且做一定的处理,
 * 使同时在Label里显示,若按enter则清空TextField 区域 */
public class TextFieldExample implements TextListener, ActionListener {

	Frame f;
	Label lb;//Label对象
	TextField tf;//TextField对象
	
	public static void main(String[] args) {
		
		new TextFieldExample();

	}
	
	public TextFieldExample()
	{
		f = new Frame("TextField Example");
		f.setLayout(new GridLayout(2,1));
		
		tf = new TextField("",20);//TextField对象的构造方法
		////添加了两个监听器
		tf.addTextListener(this);
		tf.addActionListener(this);//
		
		lb = new Label();
		
		f.add(tf);
		f.add(lb);
		f.pack();
		f.setVisible(true);
	}
	
	
	public void textValueChanged(TextEvent e) {
		
		lb.setText(tf.getText());//实现了两个组件之间的信息的交互

	}

	public void actionPerformed(ActionEvent e) {
		
		tf.setText("clearing out");

	}
	
}

9,TextArea

package GUI;

import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.TextArea;

/*用TextArea实现多行文字显示,且自动产生滚动条,TextArea组件比TextField组件多了行数和滚动条设置
 * 不过并不像TextField组件会产生ActionEvent时间,其余使用方法都是一样的*/
public class TextAreaExample {

	public static void main(String[] args) {
		
		Frame f = new Frame("TextArea Example");
		f.setLayout(new GridLayout(4,1));
		
		String str = "1234567890 234567890 34567890 4567890 567890";
		
		//构造一个新文本区,该文本区具有指定的文本,以及指定的行数、列数和滚动条可见性
		TextArea ta1 = new TextArea(str,2,10,TextArea.SCROLLBARS_NONE);
		TextArea ta2 = new TextArea(str,2,10,TextArea.SCROLLBARS_HORIZONTAL_ONLY);
		TextArea ta3 = new TextArea(str,2,10,TextArea.SCROLLBARS_VERTICAL_ONLY);
		TextArea ta4 = new TextArea(str,2,10,TextArea.SCROLLBARS_BOTH);

		f.add(ta1);
		f.add(ta2);
		f.add(ta3);
		f.add(ta4);
		f.pack();
		f.setVisible(true);
	}

}

posted @ 2011-03-29 20:47  jinmengzhe  阅读(2734)  评论(0编辑  收藏  举报