课件第5章用户界面设计_第1页
课件第5章用户界面设计_第2页
课件第5章用户界面设计_第3页
课件第5章用户界面设计_第4页
课件第5章用户界面设计_第5页
已阅读5页,还剩160页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章用户图形界面设计【学习目标】面向对象编程21.理解事件处理机制。2.理解组件与容器的关系。3.能够创建和操作按钮、标签、文本框、单选按钮、复选框、列表框等图形组件。4.了解各种布局管理器的特点,例如FlowLayout,BorderLayout,GridLayout,CardLayout,null布局管理器等,并且能够利用它们设置容器中的组件。

5.创建和操作窗口。6.创建和操作下拉菜单和弹出式菜单。7.能够利用Dialog类和FileDialog类创建实用的对话框。5.1

AWT概述在java1.0和java1.1中,使用的GUI库是AWT,其设计目标是让程序员构建一个通用的GUI,使其在所有平台上都能正常显示。关于AWT有如下特点:其具体实现由目标平台下的OS来解释,从而导致Java

GUI在不同平台下会出现不同的运行效果(窗口外观、字体等的显示效果会发生变化)。组件在设计时不应采用绝对定位,而应采用布局管理器来实现相对定位,以达到与平台及设备无关。AWT组件及事件响应不及微软的SDK丰富(因为有些OS平台无微软的Windows组件),Sun在Java2中新增了SwingGUI组件。包说明java.awtAWT核心包,包括基本组件及其相关类和接口等java.awt.color颜色定义及其空间java.awt.datatransfer数据传输和剪贴板功能java.awt.dnd图形化用户界面之间实现拖拽功能java.awt.event事件及监听器类java.awt.font字体java.awt.geom图形绘制java.awt.image图像处理java.awt.print打印java.awt包包含了AWT的所有类和接口,其组成和和功能如下表所示:表5-1

java.awt包5.2容器和基本组件一、容器(Container)概述容器的主要作用是实现图形界面和组织其它组件。是用来组织其它图形界面的最基础的单元,如一个窗口。容器内部可以包含许多其它界面元素,也可以包含另一个容器,这个容器再包含很多的元素。容器的特点如下:1.容器有一定的范围2.容器有一定的位置3.容器通常有背景4.背景覆盖整个容器,可以由编程者改变,如变成透明、单色、或用一个图案或图象等。5.容器中的其它元素将随容器的打开而打开,关闭而隐藏。6.容器可以按一定的规则来安排包含的各种元素,如相对的位置等。7.容器可能包含在其它容器中。Java中的容器有:Panel(为组件提供空间)和Applet是无边框的容器组件。ScrollPane是具有边框且带有滚动条的容器组件Window、Frame、Dialog、FileDialog等都是有边框的容器组件并且可以移动、放大、缩小、关闭等Frame和Panel。容器组件其中最常用的方法是:add()---添加其它组件setLayout()---设置容器组件内各个组件的摆放方式。二、Frame容器Frame类继承于Window类,而Window类是继承

Container类,但是Window类只有简单的窗口框,没有通用的标题栏、边框等,所以我们常用Frame类。Frame类的构造函数:public

Frame([String

title])框架是带有标题和边界的顶层窗口。框架的缺省布局是BorderLayout。Frame的常用方法:public

void

setSize(intwidth,int

height)//设置宽和高

public

void

setVisible(boolean

v)//设置窗口是否可见

public

void

setResizable(boolean

b)//是否可调大小

public

void

setIconImage(Image

m)//设置窗口图标

public

void

setBounds(int

x,int

y,int

w,int

h)public

void

pack()//以紧凑方式显示public

void

setMenuBar(MenuBar

m)//设置菜单例5.1

第一个窗口程序import

java.awt.*;public

class

FirstWindow{public

static

void

main(String[]

args)

{Frame

f1=new

Frame();//创建一个无标题的窗口f1Frame

f2=new

Frame("我是标题");//创建一个带标题的窗口f2f1.setSize(100,100);//设置第一个窗口的大小为100*100f2.setSize(200,100);//设置第二个窗口的大小为200*100f1.setVisible(true);//设置第一个窗口可见

f2.setVisible(true);//设置第二个窗口可见}}例5.2第一个完整窗口程序import

java.awt.*;import

java.awt.event.*;//事件处理程序必需

class

MyWindow

extends

Frame{MyWindow(String

s){//类的构造函数

super(s);//调用父类Frame的构造函数

setSize(400,300);Toolkit

tk=getToolkit();//以下几行用于创建窗口图标

Image

img=tk.getImage("love.jpg");setIconImage(img);setBackground(Color.green);//设置窗口背景颜色为绿色

setVisible(true);//给窗口增加事件监听器

this.addWindowListener(new

WindowAdapter(){//重写窗口关闭事件方法public

void

windowClosing(WindowEvent

e){

dispose();//关闭窗口System.exit(0);//退出系统}}}}//主类public

class

window{public

static

void

main(String

args[])

{//声明定义并实例化一个MyWindow类的对象

window//这里的参数"我的第一个窗口"实际上就对应于

MyWindow类的构造函数参数sMyWindow

window=new

MyWindow("我的第一个窗口");}}三、Panel容器Panel是一个无边框容器,Panel不可以独立出现在界面上,必须放在某Container中才可以。例5.3

Panel容器示例

import

java.awt.*;import

java.applet.*;public

class

FirstPanel

extends

Applet{public

void

init()

{Panel

p1=new

Panel();//创建新的Panel对象P1p1.setBackground(Color.yellow);//给P1设置背景颜色为黄色

p1.setSize(200,100);//设置P1的大小

setBackground(Color.blue);//设置Applet的背景颜色

setSize(250,150);//设置Applet的大小add(p1);//将P1加入到Applet中去}}5.3布局管理器Java中的布局有如下几种:Flowlayout(从上到下,从左到右依次摆放,每行均居中,它是Panel、Applet的缺省布局);BorderLayout(将容器内的空间划分为东、南、西、北、中五个方位,并指明组件所在的方位,它是Window、Dialog、Frame的缺省布局方式);CardLayout(卡片叠式布局):将组件像卡片一样放置在容器中,在某一时刻只有一个组件可见;GridLayout(行列网格状布局);形似一个无框线的表格,每个单元格中放一个组件;GridBagLayout更灵活的行列网格布局,允许组件合并单元格放置;NULL布局:用setLayout(null)可以不使用布局,此时可以对组件进行绝对定位Public

void

setBounds(int

x,int

y,int

w,int

h)如何将布局加入到我们的容器中呢?实际很简单,我们先要创建指定布局方式类的对象,然后调用容器类的setLayout()方法来指定所需的布局方式。例如:setLayout(new

FlowLayout());1.Flowlayout布局Flowlayout布局从上到下,从左到右依次摆放,每行均居中,它是Panel、Applet的缺省布局。Flowlayout的构造函数有三种:public

FlowLayout()//按默认居中方式放置组件public

FlowLayout(int

alignment)//按指定对齐方式放置组件public

FlowLayout(int

alignment,int

h,int

v)//按指定对齐方式放置组件其中参数alignment可以分别取FlowLayout.RIGHT,FlowLayout.LEFT,FlowLayout.CENTER(默认值);h表示每个组件左右间隔距离,单位为像素,v表示每个组件上下间隔距离,单位为像素。例5.4

FlowLayout布局示例import

java.awt.*;import

java.awt.event.*;public

class

FlowLayoutTest

extends

Frame{

public

FlowLayoutTest(String

s){

super(s);this.addWindowListener(newWindowAdapter(){public

void

windowClosing(WindowEvent

e){dispose();System.exit(0);}});}public

static

void

main(String[]

args){

if

(args.length

!=

1){System.out.println("您没有输入命令行参数!");System.exit(0);}//取得命令行参数String

buttonString=args[0];//从命令行的参数输入得到显示的按钮数目

int

buttonNumber=Integer.parseInt(buttonString);//实例化FlowLayoutTest对象fFlowLayoutTestf=newFlowLayoutTest("FlowLayout测试");//按参数创建按钮数组Button[]btn=new

Button[buttonNumber];//给窗口添加布局,

FlowLayout.LEFT参数指定所有组件局左对齐f.setLayout(new

FlowLayout(FlowLayout.LEFT,5,5));for

(int

i

=

0;

i

<

buttonNumber;

i++

){btn[i]=new

Button("按钮"+(i+1));//将按钮添加到窗口中

f.add(btn[i]);}f.setSize(250,100);f.setVisible(true);}}程序运行效果如图5-1。当窗口被改变了大小,则组件会自动被布局管理器重新排列,如图5-2。2.BorderLayout布局BorderLayout布局将容器内的空间划分为东、南、西、北、中五个方位,并指明组件所在的方位,它是Window、Dialog、Frame的缺省布局方式。BorderLayout布局的构造函数有两种:

public

BorderLayout()//按默认方式放置组件public

BorderLayout(int

h,int

v)//指定组件间隔其中参数h表示每个组件左右间隔距离,单位为像素,v表示每个组件上下间隔距离,单位为像素。例5.5

BorderLayout布局示例import

java.awt.*;public

class

BorderLayoutTest{public

static

void

main(String[]

args){Frame

f=new

Frame("BorderLayout示例");//设置布局为BorderLayout,并指定组件间隔为5f.setLayout(new

BorderLayout(5,5));Button

btn1=new

Button("东");Button

btn2=new

Button("南");Button

btn3=new

Button("西");Button

btn4=new

Button("北");Button

btn5=new

Button("中");f.add(btn1,BorderLayout.EAST);f.add(btn2,BorderLayout.SOUTH);f.add(btn3,BorderLayout.WEST);f.add(btn4,BorderLayout.NORTH);f.add(btn5,BorderLayout.CENTER);f.setSize(400,250);f.setVisible(true);}}BorderLayout布局的版面配置如图5-3。我们可以使用容器的add方法将组件加入到容器中,同时指定位置,例如:Frame

f=new

Frame()//创建窗口fButton

b=new

Button("按钮");//创建按钮bf.add(b,BorderLayout.CENTER);//将b加到窗口f的中间3.CardLayout布局(卡片叠式布局)CardLayout布局将组件象卡片一样放置在容器中,在某一时刻只有一个组件可见。CardLayout布局的构造函数有两种:

public

CardLayout()//按默认居中方式放置组件public

CardLayout(int

h,intv)//按指定对齐方式放置组件其中参数h表示卡片各边和容器的水平间隔距离,单位为像素,v表示卡片各边和容器的上下间隔距离,单位为像素。CardLayout布局的常用方法:voidfirst(Container

parent)//显示容器parent中的第一张卡片voidlast(Containerparent)//显示容器parent中的最后一张卡片voidnext(Containerparent)//显示容器parent中的下一张卡片void

show(Container

parent,String

name)//显示容器

parent中的name卡片例5.6

CardLayout布局示例

import

java.awt.*;import

java.awt.event.*;//引用接口ActionListener,这是按钮事件编程所必须的,implements为关键字public

class

CardLayoutTest

implements

ActionListener{//由于要在不同函数中使用,所以f和card必须定义成全局变量

Frame

f;CardLayout

card;public

CardLayoutTest()//类CardLayoutTest的构造函数{f=new

Frame("CardLayout示例");Button

btn1=new

Button("第一张卡片");Button

btn2=new

Button("第二张卡片");Button

btn3=new

Button("第三张卡片");btn1.addActionListener(this);//给按钮增加事件监听器

btn2.addActionListener(this);btn3.addActionListener(this);card=new

CardLayout(10,10);//设置卡片和容器的间隔距离

f.setLayout(card);f.add(btn1,"C1");//将按钮btn1加到f中,并命名为C1f.add(btn2,"C2");f.add(btn3,"C3");f.setSize(100,80);f.setVisible(true);}public

static

void

main(String[]

args){new

CardLayoutTest();//实例化类对象}public

void

actionPerformed(ActionEvent

e){

card.next(f);//重写抽象方法,指定当单击按钮时显示下一卡片}}4.GridLayout(行列网格状布局)GridLayout布局形似一个无框线的表格,每个单元格中放一个组件,其配置方式是按组件加入的顺序依次从左向右,由上到下地摆放。放置在面板上的组件大小都是一样的。GridLayout布局的构造函数有两种:public

GridLayout(introws,int

columns)//按指定行数和列数放置组件public

GridLayout(introws,int

columns,int

h,int

v)//按指定方式放置组件其中参数rows和columns分别表示将容器均匀地划分为一个rows行columns列的表格,参数h表示各组件的水平间隔距离,单位为像素,v表示各组件的上下间隔距离,单位为像素。例5.7

GridLayout布局示例

import

java.awt.*;public

class

GridLayoutTest{public

static

void

main(String[]

args){Frame

f=new

Frame("GridLayout示例");//给窗口添加2×3的GridLayout布局,组件间隔为5f.setLayout(new

GridLayout(2,3,5,5));Button

btn1=new

Button("第一按钮");Button

btn2=new

Button("第二按钮");Button

btn3=new

Button("第三按钮");Button

btn4=new

Button("第四按钮");Button

btn5=new

Button("第五按钮");f.add(btn1);f.add(btn2);f.add(btn3);f.add(btn4);f.add(btn5);f.pack();//以紧凑方式显示窗口

f.setVisible(true);}}5.GridBagLayout布局GridBagLayout是Java中更灵活的行列网格布局,允许组件在水平或垂直方向占一个或多个单元格,即并不要求组件大小一样,因此该布局管理提供了更灵活、更复杂的网格布局。一般来说,只要你能想象出来的布局都可以用它来完成。由于GridBagLayout所有版面配置的设定都是由GridBagConstraints类对象的各种属性值来完成的,所以下面先介绍该类的相关内容。GridBagConstraints的构造函数只有一种:

public

GridBagConstraints()其属性如下:⑴public

int

anchor该属性的取值为CENTER(居中,默认值)、NORTH(北)、NORTHEAST(东北)、EAST(东)、SOUTHEAST(东南)、SOUTH(南)、SOUTHWEST(西南)、WEST(西)、NORTHWEST(西北)。该属性的作用是:当组件大小比显示区域网格小时,指明组件所在位置。⑵public

int

fill该属性取值为:NONE(不改变组件大小)、HORIZONTAL(组件高度不变,水平填满显示区域)、VERTICAL(组件长度不变,垂直填满显示区域)、BOTH(水平和垂直方向都填满显示区域)。其作用是:指明组件填充显示区域的情况。⑶public

intgridwidth和public

intgridheight这两个属性分别指明组件在一行或列中占几个单元格,默认为1。例5.8

GridBagLayout布局示例

import

java.awt.*;public

class

GridBagLayoutTest{public

static

void

main(String[]

args){MyGridBagLayout

jbl=newMyGridBagLayout("GridBagLayout示例");}}class

MyGridBagLayout

extends

Frame{MyGridBagLayout(String

s)//MyGridBagLayout

类的构造函数{super(s);//实例化GridBagLayout对象gridbagGridBagLayout

gridbag=new

GridBagLayout();//实例化GridBagConstraints对象cGridBagConstraints

c=new

GridBagConstraints();setLayout(gridbag);//设置布局为gridbagc.fill=GridBagConstraints.BOTH;//设置属性fill//该属性指明该行所放置的组件在容器放大时,分配额外水平空间的比例

c.weightx=1.0;//调用自定义方法addButton加入按钮,以下三个按钮按相同属性配置addButton("按钮1",gridbag,c);addButton("按钮2",gridbag,c);addButton("按钮3",gridbag,c);//设置第四个按钮为第一行最后一个组件

c.gridwidth=GridBagConstraints.REMAINDER;addButton("按钮4",gridbag,c);c.weightx=0.0;addButton("按钮5",gridbag,c);//指定按钮6为当前列以加组件“按钮5”的下一个组件

c.gridwidth=GridBagConstraints.RELATIVE;addButton("按钮6",gridbag,c);//设置第七个按钮为第三行最后一个组件

c.gridwidth=GridBagConstraints.REMAINDER;addButton("按钮7",gridbag,c);

c.gridheight=2;//指定“按钮8”占有2行1列c.gridwidth=1;c.weighty=1.0;addButton("按钮8",gridbag,c);c.gridheight=1;//指定“按钮9”占有1列//指定“按钮9”为当前行最后一个组件

c.gridwidth=GridBagConstraints.REMAINDER;c.weighty=0;addButton("按钮9",gridbag,c);addButton("按钮10",gridbag,c);setSize(300,200);setVisible(true);}void

addButton(String

label,GridBagLayoutgridbag,GridBagConstraints

c){Button

b=newButton(label);gridbag.setConstraints(b,c);add(b);}}6.NULL布局不使用布局有两种方法可以指定组件在面板上的位置和大小:⑴先用方法setSize(intwidth,ingheight)来指定组件的大小,再用方法setLocation来指定组件的位置;⑵直接将上面两步合并,利用下面每个组件都有的方法来设置:Public

void

setBounds(int

x,int

y,int

w,int

h)其中参数x、y指定组件左上角在容器中的坐标,w、h指定组件的宽和高。5.4

AWT组件

awt的组件都包括在组件类Component中。在此我们先来看一下java.awt包中都有些什么重要的类,请仔细看下图5-4。

本节中我们主要介绍AWT的常用组件的相关知识。一、标签Label1.创建Label类对象格式: public

Label([String

str])例如:Label

L1=new

Label(“This

is

aLabel!”)public

Label(String

str,int

align)注:

align=Label.LEFT|Label.RIGHT|Label.CENTER2.常用方法:public

String

getText()//得到标签文本

public

void

setText(String

s)//为标签设置只读文本信息publicvoidsetAlignment(intalign)//设置对齐方式publicvoidsetBackground(Colorc)//设置背景颜色publicvoidsetForeground(Colorc)//设置字体例5.9标签的示例import

java.awt.*;import

java.applet.Applet;public

class

label

extends

Applet{//创建一个java小程序

Label

label1,label2;//声明两个标签对象public

void

init()

{label1=new

Label();label1.setText("你好!我是一个标签!");label2=new

Label("你好!我是另外一个标签!");label2.setBackground(Color.yellow);//设置背景和前景颜色label2.setForeground(Color.red);add(label1);add(label2);}public

void

paint(Graphics

g)

{//下面的方法我们在后面学习,这里简单介绍一下,第一个参数是输出的内容//后面两个整数参数为输出坐标(左上角)g.drawString("label1的文本是:"+label1.getText(),15,100);g.drawString("label2的文本是:"+label2.getText(),60,140);}}二、按钮Button

1.创建Button类对象格式:public

Button([String

str])2.按钮事件:按钮事件必须实现ActionListener接口,例如:public

class

b

implements

ActionListenerbtn.addActionListener(this);//按钮加事件监听器然后在事件处理方法actionPerformed中进行编程例如:public

void

actionPerformed(ActionEvent

e){if(e.getSource()==btn)//或用如下方法//if(e.getActionCommand().equals(“按钮文字”)System.out.println(“我被单击了!”);}例5.10按钮的示例import

java.awt.*;import

java.applet.Applet;import

java.awt.event.*;public

class

button

extends

AppletimplementsActionListener{Button

btn1,btn2;int

k=0;public

voidinit(){Button

btn1=new

Button("你好");btn1.addActionListener(this);//加事件监听器add(btn1);Button

btn2=new

Button("清除");btn2.addActionListener(this);add(btn2);}public

void

paint(Graphicsg){if(k==1)g.drawString("你单击了[你好]按钮!",50,80);if(k==2){}}public

voidactionPerformed(ActionEvente)

{if(e.getActionCommand().equals("你好"))//判断是哪个按钮被单击k=1;if(e.getActionCommand().equals("清除"))k=2;repaint();//重新绘制界面}}三、文本框TextField1.创建TextField类对象格式:public

TextField([String

str])//参数str表示缺省值

public

TextField(int

n)//参数n表示列数public

TextField(String

s,int

n)2.文本框事件:在文本框中按下回车键将会引发ActionEvent事件,需要实现ActionListener接口中的actionPerformed方法,同时如果文本框中的内容发生了改变,将引发

TextEvent事件,需要实现TextListener接口中的

textValueChanged方法3.方法:public

String

getText()//取得文本框内容public

String

getSelectedText()//取得文本框中被选择的内容public

void

setText(String

s)//设置文本框的内容public

void

setEchoChar(char

c)//设置回显字符

public

void

setEditable(boolean

b)//设置文本框是否可以编辑public

void

setBackground(Color

c)//设置背景颜色

public

void

setForeground(Color

c)//设置前景颜色例5.11文本框的示例

import

java.awt.*;import

java.awt.event.*;public

class

textfield

implementsActionListener,TextListener{Frame

f;TextField

tfName,tfPWD;Label

lblName,lblPWD,lblTip;public

static

void

main(String[]

arg){new

textfield();}public

textfield(){f=new

Frame("文本框示例");f.setLayout(new

GridLayout(3,2));lblName=new

Label("请输入姓名",Label.RIGHT);//创建标签并向右对齐lblPWD=new

Label("请输入密码",LablblTip=new

Label();tfName=newTextField("",15);//创建文本框,大小为15列tfName.addTextListener(this);//添加监听器

tfPWD=new

TextField("",10);tfPWD.setEchoChar('#');//设置回显字符

tfPWD.addActionListener(this);f.add(lblName);//注意添加组件的顺序

f.add(tfName);f.add(lblPWD);f.add(tfPWD);f.add(lblTip);f.pack();f.setVisible(true);}public

void

actionPerformed(ActionEvent

e){

lblTip.setText("姓名:"+tfName.getText()+",密码:"+tfPWD.getText());}public

void

textValueChanged(TextEvent

e){lblTip.setText("您输入的姓名为:

"+tfName.getText());}}四、文本区TextArea创建TextArea类对象格式:public

TextArea()public

TextArea(int

r,intc)//指定行数r列数cpublic

TextArea(String

s,int

r,int

c,int

scroll)其中scroll取值如下:TextArea.SCROLLBARS_BOTH//水平和垂直滚动条都有TextArea.SCROLLBARS_HORIZONTAL_ONLY//只有水平滚动条

TextArea.SCROLLBARS_VERTICAL_ONLY//只有垂直滚动条

TextArea.SCROLLBARS_NONE//没有滚动条文本区事件:文本区内容发生变化会引发TextEvent事件,引入接口TextListener,使用其抽象方法textValueChanged。给文本区ta1加事件监听器:ta1.addTextListener(this);3.方法:public

String

getText()//取得文本区内容

public

void

setText(String

s)//设置文本区内容public

void

append(String

s)//将s追加到文本区中

public

int

getCaretPosition()//取得当前插入位置

public

void

insert(String

s,int

p)//在位置p处插入spublic

String

getSelectedText()//取得选定文本public

int

getSelectionStart()//取得选定文本的起始位置

public

int

getSelectionEnd()//取得选定文本的结束位置public

void

replaceRange(String

ss,int

s,int

e)//用ss代替文本区从

s开始到e结束的内容。例5.12文本区的示例

import

java.awt.*;import

java.awt.event.*;import

java.util.*;class

WindowTextArea

extends

Frame

implementsTextListener,ActionListener{ TextArea

text1,text2;Button

buttonClear;WindowTextArea(){

setLayout(new

FlowLayout());text1=new

TextArea(6,15);text2=new

TextArea(6,15);buttonClear=new

Button("清空");add(text1);add(text2);add(buttonClear);text2.setEditable(false);text1.addTextListener(this);buttonClear.addActionListener(this);setBounds(100,100,350,160);setVisible(true);validate();}public

void

textValueChanged(TextEvente){ Strings=text1.getText();StringTokenizer

fenxi=new

StringTokenizer(s,"

,'\n'");int

n=fenxi.countTokens();String

a[]=new

String[n];for(int

i=0;i<=n-1;i++){ Stringtemp=fenxi.nextToken();a[i]=temp;}Arrays.sort(a);text2.setText(null);for(inti=0;i<n;i++){

text2.append(a[i]+"\n");}}public

voidactionPerformed(ActionEvente){

text1.setText(null);}}public

class

特性他热爱Example{ public

static

void

main(String

args[]){

WindowTextArea

win=new

WindowTextArea();}}五、复选框Checkbox1.创建Checkbox类对象格式:public

Checkbox([String

str])public

Checkbox(String

s,boolean

是否选中)2.复选框事件:复选框选择或取消变化会引发ItemEvent事件,引入接口ItemListener,使用其抽象方法itemStateChanged。给复选框chk1加事件监听器:chk1.addItemListener(this);3.方法:public

void

setState(boolean

state)//设置复选框状态public

booleangetState()//取得复选框状态

public

String

getLabel()//取得复选框标题例5.13复选框的示例import

java.awt.*;import

java.applet.Applet;importjava.awt.event.ItemListener;importjava.awt.event.ItemEvent;public

class

checkbox

extends

Appletimplements

ItemListener{Stringinteresting[]={"音乐","体育","吹牛","读书","电脑","电影"};Checkbox

C[]=new

Checkbox[6];//声明6个复选框对象数组

TextField

tf;public

voidinit(){add(new

Label("请选择兴趣爱好"));for(int

i=0;i<6;i++){C[i]=new

Checkbox(interesting[i]);//创建复选框对象

add(C[i]);C[i].addItemListener(this);//添加监听器}tf=new

TextField(40);//创建文本框对象

add(tf);}//当复选框的状态发生改变时,将引发该事件

public

void

itemStateChanged(ItemEvent

e){String

s="";for(int

i=0;i<6;i++){if(C[i].getState())//如果复选框C[i]处于选中状态{if(s!="")s=s+"、"+C[i].getLabel();elses=C[i].getLabel();}}if(s!="")tf.setText("您的兴趣爱好为:"+s);elsetf.setText("您没有选择兴趣爱好!");}

}六、单选框单选框实际是将若干个Checkbox包含在一个叫CheckboxGroup的类中来实现的,所以我们要使用单选框必须先创建一个选框组

CheckboxGroup对象,然后再创建若干个Checkbox对象,并将它们加到选框组中。格式:先定义选框组:CheckboxGroup

group=new

CheckboxGroup()再通过定义Checkbox创建单选框:public

Checkbox(String

str,boolean

state,CheckboxGroupgroup)单选框事件:参见复选框事件。例5.14

单选框的示例import

java.awt.*;import

java.applet.Applet;import

java.awt.event.*;public

class

checkboxgroup

extends

Applet

implementsItemListener{String

interesting[]={"音乐","体育","吹牛","读书","电脑","电影

"};CheckboxC[]=newCheckbox[6];TextField

tf;public

void

init()

{CheckboxGroup

c=new

CheckboxGroup();add(new

Label("请选择兴趣爱好"));for(int

i=0;i<6;i++){C[i]=new

Checkbox(interesting[i],c,false);//上面这条语句我们还可以用下面三条语句代替//C[i]=new

Checkbox(interesting[i]);//C[i].setCheckboxGroup(c);//C[i].setSate(false);add(C[i]);C[i].addItemListener(this);to=new

TextField(40);add(tf);}public

void

itemStateChanged(ItemEvent

e){String

s="";for(int

i=0;i<6;i++)

{if(C[i].getState())s=C[i].getLabel();}if(s!="")tf.setText("您的兴趣爱好为:"+s);elsetf.setText("您没有选择兴趣爱好!");}}七、下拉列表Choice创建下拉列表Choice类对象格式:先定义一个空列表:Choice

choice=new

Choice()再通过addItem(“选项”)或add(“选项”)方法增加选项下拉列表事件:参见复选框事件,但应该通过如下方法获得下拉列表事件源:

if(e.getItemSelectable().equals(choice)){}3.方法:public

int

getSelectIndex()//取得被选项索引号

publicString

getSelectItem()//取得被选项public

void

select(int

pos|String

str)//选定指定选项

public

void

insert(String

item,int

index)//在指定位置插入选项public

void

remove(int

pos|String

str)//删除指定位置或内容的选项public

void

removeAll()//删除所有选项public

void

getItem(int

pos)//取得指定位置选项

public

void

getItemCount()//取得选项总数例5.15下拉列表的示例import

java.awt.*;import

java.applet.Applet;import

java.awt.event.*;public

class

choice

extends

Applet

implements

ItemListener,ActionListener{Button

btn1,btn2,btn3,btn4;Choice

choice1=new

Choice();TextField

tf;public

void

init()

{choice1.add("请在文本框中输入要追加的内容");add(choice1);choice1.addItemListener(this);//给列表框加事件监听器

tf=new

TextField(40);add(tf);btn1=new

Button("追加");add(btn1);btn1.addActionListener(this);btn2=new

Button("插入");add(btn2);btn2.addActionListener(this);btn3=new

Button("删除");add(btn3);btn3.addActionListener(this);btn4=new

Button("删除全部");add(btn4);btn4.addActionListener(this);}public

void

itemStateChanged(ItemEvent

e)

{if(e.getItemSelectable().equals(choice1))tf.setText("您选中的是:["+choice1.getSelectedItem()+"]序号是:"+choice1.getSelectedIndex());}public

void

actionPerformed(ActionEvent

e){if(e.getSource().equals(btn1))choice1.add(tf.getText());//追加内容

if(e.getSource().equals(btn2))

choice1.insert(tf.getText(),0);//在第一行插入新内容

if(e.getSource().equals(btn3))choice1.remove(choice1.getSelectedIndex());//删除所选内容if(e.getSource().equals(btn4))choice1.removeAll();//删除所有内容}}八、列表List1.创建列表List类对象格式:public

List([int

rows])public

List(int

rows,boolean

multipleMode)通过add(“选项”)或add(“选项”,int

index)方法增加选项

2.列表事件:单击触发ItemEvent事件,由ItemListener接口中的

ItemStateChanged()方法处理事件,用getItemSelectable()方法获得事件源。用addItemListener(this)方法添加监听器。双击触发ActionEvent事件,由ActionListener接口中的actionPerformed()方法处理事件,用getSource()方法获得事件源。用addActionListener(this)方法添加监听器。3.方法:public

int

getSelectIndex()//取得被选项索引号public

int[]getSelectIndexes()//取得多个被选项索引号

public

String

getSelectItem()//取得被选项public

String[]

getSelectItems()//取得多个被选项

public

intgetItemCount()//取得选项数public

void

select(int

index)//选定指定选项

public

int

getRows()//取得可视行数public

void

remove(intpos|String

str)//删除指定位置或内容的选项

public

void

removeAll()//删除所有选项publicvoiddeselect(intpos)//取消选定指定位置的选项public

boolean

isIndexSelected(int

pos)//判断指定选项是否被选中

public

void

setMultipleMode()//设置多选或单选模式public

booleanisMultipleMode()//判断是否为多选模式例5.16列表的示例import

java.awt.*;import

java.applet.Applet;import

java.awt.event.*;public

class

list1

extends

Appletimplements

ItemListener,ActionListener{Button

btn1,btn2,btn3;List

list1=new

List(5,true);//创建一个可显示5行的多选模式列表对象TextField

tf;public

void

init(){list1.add("

");add(list1);list1.addItemListener(this);//添加列表的单击监听器list1.addActionListener(this);//添加列表的双击监听器tf=new

TextField(30);add(tf);btn1=new

Button("加入");add(btn1);btn1.addActionListener(this);btn2=new

Button("删除");add(btn2);btn2.addActionListener(this);btn3=new

Button("删除全部");add(btn3);btn3.addActionListener(this);}public

void

itemStateChanged(ItemEvente){String

s="";if(e.getItemSelectable().equals(list1)){String[]

L;L=list1.getSelectedItems();//取得所有被选项并放入数组Lfor(int

i=0;i<L.length;i++){if(s!="")s=s+","+L[i];elses=L[i];}tf.setText("您选中的是:"+s);}}public

voidactionPerformed(ActionEvent

e){if(e.getSource().equals(btn1))list1.add(tf.getText());if(e.getSource().equals(btn2))list1.remove(list1.getSelectedIndex());if(e.getSource().equals(btn3))list1.removeAll();if(e.getSource().equals(list1))//如果双击列表tf.setText("您双击了选项["九、滚动条Scrollbar电脑屏幕的尺寸是有限的,我们不可能每次都刚好将输出内容完全显示在屏幕上,所以要显示超出屏幕大小的内容时我们就需要利用滚动条。下面我们看如何创建滚动条Scrollbar:1.格式:public

Scrollbar(int

o,int

v,int

l,int

min,int

max)其中:o—可取Scrollbar.HORIZONTAL和Scrollbar.VERTICALv—滑块的初始位置l—滑块的大小min,max—滚动条的最大和最小值

2.滚动条事件:滑块位置改变将触发AdjustmentEvent事件,应该引入接口:AdjustmentListener,其抽象方法为:djustmentValueChanged。给滚动条增加事件监听器slider.addAdjustmentListener(this)用如下方法获得滚动条事件源:

if(e.getAdjustable().equals(slider)){}3.方法:public

int

getValue()//取得滑块当前的值public

void

setBlockIncrement(intn)//设置滑块增量(单击滚动条空白地方)public

void

setUnitIncrement(int

n)//设置滚动条单位增量(单击箭头按钮)public

int

getMaximum()//取得滚动条最大值

public

int

getMinimum()//取得滚动条最小值public

int

getOrientation()//取得滚动条种类(水平、垂直)public

void

setMaximum(int

n)//设置滚动条最大值

public

void

setMinimum(int

n)//设置滚动条最小值public

void

setOrientation(int

n)//设置滚动条种类(水平、垂直)public

void

setValue(int

n)//设置滚动条目前的值例5.17滚动条的示例import

java.awt.*;import

java.awt.event.*;public

class

scrollbar

implementsAdjustmentListener{Button

btn1;Frame

f;Panel

p;//我们需要用它来放置按钮Scrollbar

Hsb,Vsb;//声明两个滚动条对象int

x=0,y=0;public

static

void

main(String[]

arg){new

scrollbar();}public

scrollbar(){f=new

Frame("滚动条示例");p=new

Panel(null);

btn1=new

Button("测试按钮");btn1.setSize(150,30);btn1.setLocation(x,y);Hsb=newScrollbar(Scrollbar.HORIZONTAL,0,10,0,300);Vsb=newScrollbar(Scrollbar.VERTICAL,0,10,0,200);Hsb.addAdjustmentListener(this);//添加事件监听器Vsb.addAdjustmentListener(this);p.add(btn1);f.add(p,BorderLayout.CENTER);f.add(Hsb,BorderLayout.SOUTH);f.add(Vsb,BorderLayout.EAST);f.setSize(500,350);f.setVisible(true);}public

voidadjustmentValueChanged(AdjustmentEvent

e){Scrollbar

sb=(Scrollbar)e.getSource();//强制转换事件源为滚动条对象if(sb.getOrientation()==Scrollbar.HORIZONTAL)//如果是水平滚动条x=sb.getValue();elsey=sb.getValue();btn1.setLocation(x,y);//按滚动条的当前值重新定位按钮btn1.setLabel("当前位置

("+x+","+y+")");//设置按钮文字}}十、滚动面板ScrollPane上面介绍的滚动条在使用上有许多的不方便,我们必须进行事件处理才能达到我们的要求,那么有没有办法让程序自己决定是否需要滚动呢?AWT中右一个带有滚动条的Panel,即ScrollPane,它单独使用时和Panel一样,没有什么区别。我们必须将所有组件放到一个Panel中,再将Panel放在ScrollPane中即可。要创建ScrollPane很简单,其构造函数如下:public

ScrollPane()//不带任何参数,按默认方式创建

public

ScrollPane(inttype)其中type有三种取值:ScrollPane.SCROLLBARS_AS_NEEDED—按需要显示滚动条

ScrollPane.SCROLLBARS_NONE—不需要显示滚动条

ScrollPane.SCROLLBARS_ALWAYS—永远都要显示滚动条

ScrollPane不需要我们去处理滚动事件,一切都是自动的例5.18

ScrollPane的示例import

java.awt.*;public

class

scrollpane{public

static

voidmain(String[]

arg){Framef=newFrame("滚动面板示例");Panel

p=newPanel(new

FlowLayout());Button

btn[]=newButton[10];for(inti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论