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