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