JAVA面向对象程序设计实验指导书
setLayout(new GridLayout(3,3)); // 设置网格布局(3行3 列共9 个网格) l1=new Label(\标签1\b1 = new Button(\按钮1\b2 = new Button(\按钮2\b3 = new Button(\按钮3\b4 = new Button(\按钮4\add(l1); add(b1); add(b2); add(b3);
add(new Label()); add(b4);
add(new Button(\按钮5\add( new Button(\按钮6\add(new Label(\标签2\} }
(3) 编译程序LX6_1.java。
(4) 编写显示Applet 的页面文件LX6_1.html,在浏览器显示结果如图6.1 所示。
图6.1
思考:在网格布局中组件的大小是如何确定的?组件是如何确定排列顺序的? 2.在面板中添加组件
(1)程序功能:在Applet 中添加面板容器,并分别在Applet、面板容器中添加组件并使用不同的布局管理方式。
(2)编写LX6_2.java 程序文件,源代码如下。 import java.awt.*; import java.awt.Color; import java.applet.Applet; public class LX6_2 extends Applet { public void init() { //设置最底层的 Applet 容器为顺序布局
setFont(new Font(\
Label l=new Label(\这是最底层的 Applet 容器中的标签\add(l);
Panel panel1=new Panel(); add( panel1);
panel1.setBackground(Color.blue); panel1.setForeground(Color.red);
panel1.setLayout(new BorderLayout());//设置边界布局 panel1.add(\北\panel1.add(\南\panel1.add(\东\panel1.add(\西\
panel1.add(\这是在 Panel1面板 中部添加的标签\Panel panel2=new Panel(); add( panel2);
panel2.setLayout(new GridLayout(3,1)); //设置网格布局 Choice c=new Choice ();//创建下拉式列表 c.addItem(\北京\c.addItem(\上海\c.addItem(\天津\
Label l1=new Label(\这是在 Panel2 面板中的标签\
- 22 -
JAVA面向对象程序设计实验指导书 Button b1=new Button(\中的按钮\
panel2.setBackground(Color.green); panel2.add(l1);
panel2.add(b1); panel2.add(c); } }
(3)编译程序LX6_2.java。
(4)编写显示Applet 的页面文件LX6_2.html,在浏览器显示结果如图6.2 所示。
图6.2
思考:如何添加面板?如何在面板中添加组件?如何在面板中设置布局管理器?
(二) 了解事件处理机制
在图形用户界面中,程序和用户的交互是通过组件响应各种事件来实现的。例如,用户单击了一个按钮,意味着发生了按钮的单击事件;选中下拉框中的一个选项,意味着发生了一个选项事件。在Java 中能产生事件的组件叫做事件源,如按钮。如果希望对单击按钮事件进行处理,可给事件源(按钮)注册一个事件监听器(如包含按钮的容器), 如同签订了一个委托合同,当事件源发生事件时,事件监听器就代替事件源对发生的事件进行处理,这就是所谓的委托事件处理机制。
1.单击按钮的事件处理程序
(1) 程序功能:使用手工布局设置组件标签、按钮的位置,为按钮编写单击事件处理方法。当用户用鼠标单击按钮时,会听到一声响声。
(2)编写LX6_3.java 程序文件,源代码如下。 import java.awt.*;
import java.awt.event.*; import java.applet.Applet;
public class LX6_3 extends Applet implements ActionListener { / / 实现动作事件监听接口
public void init() {
setLayout(null);// 关闭默认的顺序管理布局
Label l=new Label(\按一下按钮可听到响声!\add(l); l.setBounds(40,10,150,30); Button b=new Button(\按钮\add(b);
b.setBounds(60,50,60,40);
b.addActionListener (this); // 注册事件源的动作监听者 }
public void actionPerformed(ActionEvent e) {// 实现单击事件接口的方法 Toolkit.getDefaultToolkit ().beep(); // 单击事件发生时作出的反应 } }
(3)编译程序LX6_2.java。
(4)编写显示Applet 的页面文件LX6_3.html,在浏览器显示结果如图6.3 所示。
- 23 -
JAVA面向对象程序设计实验指导书
图6.3
思考:具有事件处理功能的类有什么特点? 2. 选择复选框和单选框按钮的事件处理程序
(1)程序功能:在Applte 上创建复选框、单选框、文本区域、单行文本框等组件,并实现根据用户输入的10 进制数,选择不同选项可转换为2、8、16进制数。
(2)编写LX6_4.java 程序文件,源代码如下。 import java.applet.Applet; import java.awt.*;
import java.awt.event.*;
public class LX6_4 extends Applet implements ItemListener {
TextArea area=new TextArea(6,30);//创建文本区
String Item[]={\进制\进制\进制\进制\Checkbox cb[]=new Checkbox[5]; Checkbox radio[]=new Checkbox[5]; Label l=new Label(\输入10 进制数\
TextField TF=new TextField(6);// 创建单行文本框 public void init() { add(l);add(TF);
add(area); add(new Label(\请选择进制:\for(int i=0; i<4; i++) {
cb[i]=new Checkbox(Item[i]); add(cb[i]); cb[i].addItemListener(this); }
CheckboxGroup cbGroup=new CheckboxGroup();//创建单选框 add(new Label(\请选择进制:\for(int i=0; i<4; i++) {
radio[i]=new
Checkbox(Item[i],cbGroup,false); add(radio[i]); radio[i].addItemListener(this); }
}
public void itemStateChanged(ItemEvent e) { int x=Integer.parseInt(TF.getText()); if (e.getItem ()==\进制\
- 24 -
JAVA面向对象程序设计实验指导书 area.append (\你选择的是\if (e.getItem ()==\进制\
area.append (\你选择的是\if (e.getItem ()==\进制\
area.append (\你选择的是\if (e.getItem ()==\进制\
area.append (\你选择的是\} }
(3) 编译程序LX6_4.java。
(4) 编写显示Applet 的页面文件LX6_4.html,在浏览器显示结果如图6.4 所示。
图6.4
(三)建立独立运行的窗口界面并使用匿名类
最常使用的包含组件的容器是窗口,在Java 中窗口由Frame 类生成。 1.创建一个窗口界面
(1)程序功能:创建一个具有关闭功能的空白窗口。 (2)编写LX6_5_W.java 程序文件,源代码如下。
import java.awt.*; import java.awt.event.*; public class LX6_5_W { public static void main(String[] args) {
new LX6_5_W(); }
LX6_5_W(){
Frame f=new Frame(\初始窗口\创建窗口对象 f.setSize(350,200);//设置窗口大小
f.setVisible(true);//设置窗口是可视的
f.addWindowListener(new WindowAdapter() {// 为窗口添加窗口事件适配器
public void windowClosing(WindowEvent e) {// 关闭窗口事件的方法
System.exit(0);
- 25 -
JAVA面向对象程序设计实验指导书
}
} } }
(3) 编译并运行程序,会出现一个界面窗口如图6.5 所示。它可以最大化、最小化,单击×按钮可以关闭该窗口。
图6.5
思考:
(1)有几种创建窗口对象的方法?
(2)本程序在哪里使用了匿名类?如何创建匿名类?
2.在窗口中添加组件
(1)程序功能:在窗口中添加组件。
(2)编写LX6_6.java 程序文件,源代码如下。 import java.awt.*;
import java.awt.event.*;
public class LX6_6 extends Frame implements ActionListener {
Button btn1, btn2; TextField f,tf1,tf2; TextArea Area; LX6_6() {
super(\添加组件的窗口\
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0); } });
setSize(350,250); //设置窗口大小
setLocation(200,200);//设置窗口显示位置
setFont(new Font(\设置字体 setLayout(new FlowLayout()); Area=new TextArea (6,40);
tf1=new TextField(10); tf2=new TextField(10); btn1=new Button(\显示\退出\f=new TextField(20); add(Area);
add(new Label(\用户名\add(tf1);
add(new Label(\电话\add(tf2); add(f); add(btn1);
- 26 -