課件第5章用戶界面設(shè)計_第1頁
課件第5章用戶界面設(shè)計_第2頁
課件第5章用戶界面設(shè)計_第3頁
課件第5章用戶界面設(shè)計_第4頁
課件第5章用戶界面設(shè)計_第5頁
已閱讀5頁,還剩160頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第五章用戶圖形界面設(shè)計【學(xué)習(xí)目標(biāo)】面向?qū)ο缶幊?1.理解事件處理機(jī)制。2.理解組件與容器的關(guān)系。3.能夠創(chuàng)建和操作按鈕、標(biāo)簽、文本框、單選按鈕、復(fù)選框、列表框等圖形組件。4.了解各種布局管理器的特點(diǎn),例如FlowLayout,BorderLayout,GridLayout,CardLayout,null布局管理器等,并且能夠利用它們設(shè)置容器中的組件。

5.創(chuàng)建和操作窗口。6.創(chuàng)建和操作下拉菜單和彈出式菜單。7.能夠利用Dialog類和FileDialog類創(chuàng)建實用的對話框。5.1

AWT概述在java1.0和java1.1中,使用的GUI庫是AWT,其設(shè)計目標(biāo)是讓程序員構(gòu)建一個通用的GUI,使其在所有平臺上都能正常顯示。關(guān)于AWT有如下特點(diǎn):其具體實現(xiàn)由目標(biāo)平臺下的OS來解釋,從而導(dǎo)致Java

GUI在不同平臺下會出現(xiàn)不同的運(yùn)行效果(窗口外觀、字體等的顯示效果會發(fā)生變化)。組件在設(shè)計時不應(yīng)采用絕對定位,而應(yīng)采用布局管理器來實現(xiàn)相對定位,以達(dá)到與平臺及設(shè)備無關(guān)。AWT組件及事件響應(yīng)不及微軟的SDK豐富(因為有些OS平臺無微軟的Windows組件),Sun在Java2中新增了SwingGUI組件。包說明java.awtAWT核心包,包括基本組件及其相關(guān)類和接口等java.awt.color顏色定義及其空間java.awt.datatransfer數(shù)據(jù)傳輸和剪貼板功能java.awt.dnd圖形化用戶界面之間實現(xiàn)拖拽功能java.awt.event事件及監(jiān)聽器類java.awt.font字體java.awt.geom圖形繪制java.awt.image圖像處理java.awt.print打印java.awt包包含了AWT的所有類和接口,其組成和和功能如下表所示:表5-1

java.awt包5.2容器和基本組件一、容器(Container)概述容器的主要作用是實現(xiàn)圖形界面和組織其它組件。是用來組織其它圖形界面的最基礎(chǔ)的單元,如一個窗口。容器內(nèi)部可以包含許多其它界面元素,也可以包含另一個容器,這個容器再包含很多的元素。容器的特點(diǎn)如下:1.容器有一定的范圍2.容器有一定的位置3.容器通常有背景4.背景覆蓋整個容器,可以由編程者改變,如變成透明、單色、或用一個圖案或圖象等。5.容器中的其它元素將隨容器的打開而打開,關(guān)閉而隱藏。6.容器可以按一定的規(guī)則來安排包含的各種元素,如相對的位置等。7.容器可能包含在其它容器中。Java中的容器有:Panel(為組件提供空間)和Applet是無邊框的容器組件。ScrollPane是具有邊框且?guī)в袧L動條的容器組件Window、Frame、Dialog、FileDialog等都是有邊框的容器組件并且可以移動、放大、縮小、關(guān)閉等Frame和Panel。容器組件其中最常用的方法是:add()---添加其它組件setLayout()---設(shè)置容器組件內(nèi)各個組件的擺放方式。二、Frame容器Frame類繼承于Window類,而Window類是繼承

Container類,但是Window類只有簡單的窗口框,沒有通用的標(biāo)題欄、邊框等,所以我們常用Frame類。Frame類的構(gòu)造函數(shù):public

Frame([String

title])框架是帶有標(biāo)題和邊界的頂層窗口??蚣艿娜笔〔季质荁orderLayout。Frame的常用方法:public

void

setSize(intwidth,int

height)//設(shè)置寬和高

public

void

setVisible(boolean

v)//設(shè)置窗口是否可見

public

void

setResizable(boolean

b)//是否可調(diào)大小

public

void

setIconImage(Image

m)//設(shè)置窗口圖標(biāo)

public

void

setBounds(int

x,int

y,int

w,int

h)public

void

pack()//以緊湊方式顯示public

void

setMenuBar(MenuBar

m)//設(shè)置菜單例5.1

第一個窗口程序import

java.awt.*;public

class

FirstWindow{public

static

void

main(String[]

args)

{Frame

f1=new

Frame();//創(chuàng)建一個無標(biāo)題的窗口f1Frame

f2=new

Frame("我是標(biāo)題");//創(chuàng)建一個帶標(biāo)題的窗口f2f1.setSize(100,100);//設(shè)置第一個窗口的大小為100*100f2.setSize(200,100);//設(shè)置第二個窗口的大小為200*100f1.setVisible(true);//設(shè)置第一個窗口可見

f2.setVisible(true);//設(shè)置第二個窗口可見}}例5.2第一個完整窗口程序import

java.awt.*;import

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

class

MyWindow

extends

Frame{MyWindow(String

s){//類的構(gòu)造函數(shù)

super(s);//調(diào)用父類Frame的構(gòu)造函數(shù)

setSize(400,300);Toolkit

tk=getToolkit();//以下幾行用于創(chuàng)建窗口圖標(biāo)

Image

img=tk.getImage("love.jpg");setIconImage(img);setBackground(Color.green);//設(shè)置窗口背景顏色為綠色

setVisible(true);//給窗口增加事件監(jiān)聽器

this.addWindowListener(new

WindowAdapter(){//重寫窗口關(guān)閉事件方法public

void

windowClosing(WindowEvent

e){

dispose();//關(guān)閉窗口System.exit(0);//退出系統(tǒng)}}}}//主類public

class

window{public

static

void

main(String

args[])

{//聲明定義并實例化一個MyWindow類的對象

window//這里的參數(shù)"我的第一個窗口"實際上就對應(yīng)于

MyWindow類的構(gòu)造函數(shù)參數(shù)sMyWindow

window=new

MyWindow("我的第一個窗口");}}三、Panel容器Panel是一個無邊框容器,Panel不可以獨(dú)立出現(xiàn)在界面上,必須放在某Container中才可以。例5.3

Panel容器示例

import

java.awt.*;import

java.applet.*;public

class

FirstPanel

extends

Applet{public

void

init()

{Panel

p1=new

Panel();//創(chuàng)建新的Panel對象P1p1.setBackground(Color.yellow);//給P1設(shè)置背景顏色為黃色

p1.setSize(200,100);//設(shè)置P1的大小

setBackground(Color.blue);//設(shè)置Applet的背景顏色

setSize(250,150);//設(shè)置Applet的大小add(p1);//將P1加入到Applet中去}}5.3布局管理器Java中的布局有如下幾種:Flowlayout(從上到下,從左到右依次擺放,每行均居中,它是Panel、Applet的缺省布局);BorderLayout(將容器內(nèi)的空間劃分為東、南、西、北、中五個方位,并指明組件所在的方位,它是Window、Dialog、Frame的缺省布局方式);CardLayout(卡片疊式布局):將組件像卡片一樣放置在容器中,在某一時刻只有一個組件可見;GridLayout(行列網(wǎng)格狀布局);形似一個無框線的表格,每個單元格中放一個組件;GridBagLayout更靈活的行列網(wǎng)格布局,允許組件合并單元格放置;NULL布局:用setLayout(null)可以不使用布局,此時可以對組件進(jìn)行絕對定位Public

void

setBounds(int

x,int

y,int

w,int

h)如何將布局加入到我們的容器中呢?實際很簡單,我們先要創(chuàng)建指定布局方式類的對象,然后調(diào)用容器類的setLayout()方法來指定所需的布局方式。例如:setLayout(new

FlowLayout());1.Flowlayout布局Flowlayout布局從上到下,從左到右依次擺放,每行均居中,它是Panel、Applet的缺省布局。Flowlayout的構(gòu)造函數(shù)有三種:public

FlowLayout()//按默認(rèn)居中方式放置組件public

FlowLayout(int

alignment)//按指定對齊方式放置組件public

FlowLayout(int

alignment,int

h,int

v)//按指定對齊方式放置組件其中參數(shù)alignment可以分別取FlowLayout.RIGHT,F(xiàn)lowLayout.LEFT,F(xiàn)lowLayout.CENTER(默認(rèn)值);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("您沒有輸入命令行參數(shù)!");System.exit(0);}//取得命令行參數(shù)String

buttonString=args[0];//從命令行的參數(shù)輸入得到顯示的按鈕數(shù)目

int

buttonNumber=Integer.parseInt(buttonString);//實例化FlowLayoutTest對象fFlowLayoutTestf=newFlowLayoutTest("FlowLayout測試");//按參數(shù)創(chuàng)建按鈕數(shù)組Button[]btn=new

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

FlowLayout.LEFT參數(shù)指定所有組件局左對齊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);}}程序運(yùn)行效果如圖5-1。當(dāng)窗口被改變了大小,則組件會自動被布局管理器重新排列,如圖5-2。2.BorderLayout布局BorderLayout布局將容器內(nèi)的空間劃分為東、南、西、北、中五個方位,并指明組件所在的方位,它是Window、Dialog、Frame的缺省布局方式。BorderLayout布局的構(gòu)造函數(shù)有兩種:

public

BorderLayout()//按默認(rèn)方式放置組件public

BorderLayout(int

h,int

v)//指定組件間隔其中參數(shù)h表示每個組件左右間隔距離,單位為像素,v表示每個組件上下間隔距離,單位為像素。例5.5

BorderLayout布局示例import

java.awt.*;public

class

BorderLayoutTest{public

static

void

main(String[]

args){Frame

f=new

Frame("BorderLayout示例");//設(shè)置布局為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()//創(chuàng)建窗口fButton

b=new

Button("按鈕");//創(chuàng)建按鈕bf.add(b,BorderLayout.CENTER);//將b加到窗口f的中間3.CardLayout布局(卡片疊式布局)CardLayout布局將組件象卡片一樣放置在容器中,在某一時刻只有一個組件可見。CardLayout布局的構(gòu)造函數(shù)有兩種:

public

CardLayout()//按默認(rèn)居中方式放置組件public

CardLayout(int

h,intv)//按指定對齊方式放置組件其中參數(shù)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為關(guān)鍵字public

class

CardLayoutTest

implements

ActionListener{//由于要在不同函數(shù)中使用,所以f和card必須定義成全局變量

Frame

f;CardLayout

card;public

CardLayoutTest()//類CardLayoutTest的構(gòu)造函數(shù){f=new

Frame("CardLayout示例");Button

btn1=new

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

btn2=new

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

btn3=new

Button("第三張卡片");btn1.addActionListener(this);//給按鈕增加事件監(jiān)聽器

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

CardLayout(10,10);//設(shè)置卡片和容器的間隔距離

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);//重寫抽象方法,指定當(dāng)單擊按鈕時顯示下一卡片}}4.GridLayout(行列網(wǎng)格狀布局)GridLayout布局形似一個無框線的表格,每個單元格中放一個組件,其配置方式是按組件加入的順序依次從左向右,由上到下地擺放。放置在面板上的組件大小都是一樣的。GridLayout布局的構(gòu)造函數(shù)有兩種:public

GridLayout(introws,int

columns)//按指定行數(shù)和列數(shù)放置組件public

GridLayout(introws,int

columns,int

h,int

v)//按指定方式放置組件其中參數(shù)rows和columns分別表示將容器均勻地劃分為一個rows行columns列的表格,參數(shù)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中更靈活的行列網(wǎng)格布局,允許組件在水平或垂直方向占一個或多個單元格,即并不要求組件大小一樣,因此該布局管理提供了更靈活、更復(fù)雜的網(wǎng)格布局。一般來說,只要你能想象出來的布局都可以用它來完成。由于GridBagLayout所有版面配置的設(shè)定都是由GridBagConstraints類對象的各種屬性值來完成的,所以下面先介紹該類的相關(guān)內(nèi)容。GridBagConstraints的構(gòu)造函數(shù)只有一種:

public

GridBagConstraints()其屬性如下:⑴public

int

anchor該屬性的取值為CENTER(居中,默認(rèn)值)、NORTH(北)、NORTHEAST(東北)、EAST(東)、SOUTHEAST(東南)、SOUTH(南)、SOUTHWEST(西南)、WEST(西)、NORTHWEST(西北)。該屬性的作用是:當(dāng)組件大小比顯示區(qū)域網(wǎng)格小時,指明組件所在位置。⑵public

int

fill該屬性取值為:NONE(不改變組件大?。?、HORIZONTAL(組件高度不變,水平填滿顯示區(qū)域)、VERTICAL(組件長度不變,垂直填滿顯示區(qū)域)、BOTH(水平和垂直方向都填滿顯示區(qū)域)。其作用是:指明組件填充顯示區(qū)域的情況。⑶public

intgridwidth和public

intgridheight這兩個屬性分別指明組件在一行或列中占幾個單元格,默認(rèn)為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

類的構(gòu)造函數(shù){super(s);//實例化GridBagLayout對象gridbagGridBagLayout

gridbag=new

GridBagLayout();//實例化GridBagConstraints對象cGridBagConstraints

c=new

GridBagConstraints();setLayout(gridbag);//設(shè)置布局為gridbagc.fill=GridBagConstraints.BOTH;//設(shè)置屬性fill//該屬性指明該行所放置的組件在容器放大時,分配額外水平空間的比例

c.weightx=1.0;//調(diào)用自定義方法addButton加入按鈕,以下三個按鈕按相同屬性配置addButton("按鈕1",gridbag,c);addButton("按鈕2",gridbag,c);addButton("按鈕3",gridbag,c);//設(shè)置第四個按鈕為第一行最后一個組件

c.gridwidth=GridBagConstraints.REMAINDER;addButton("按鈕4",gridbag,c);c.weightx=0.0;addButton("按鈕5",gridbag,c);//指定按鈕6為當(dāng)前列以加組件“按鈕5”的下一個組件

c.gridwidth=GridBagConstraints.RELATIVE;addButton("按鈕6",gridbag,c);//設(shè)置第七個按鈕為第三行最后一個組件

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”為當(dāng)前行最后一個組件

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布局不使用布局有兩種方法可以指定組件在面板上的位置和大?。孩畔扔梅椒╯etSize(intwidth,ingheight)來指定組件的大小,再用方法setLocation來指定組件的位置;⑵直接將上面兩步合并,利用下面每個組件都有的方法來設(shè)置:Public

void

setBounds(int

x,int

y,int

w,int

h)其中參數(shù)x、y指定組件左上角在容器中的坐標(biāo),w、h指定組件的寬和高。5.4

AWT組件

awt的組件都包括在組件類Component中。在此我們先來看一下java.awt包中都有些什么重要的類,請仔細(xì)看下圖5-4。

本節(jié)中我們主要介紹AWT的常用組件的相關(guān)知識。一、標(biāo)簽Label1.創(chuàng)建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()//得到標(biāo)簽文本

public

void

setText(String

s)//為標(biāo)簽設(shè)置只讀文本信息publicvoidsetAlignment(intalign)//設(shè)置對齊方式publicvoidsetBackground(Colorc)//設(shè)置背景顏色publicvoidsetForeground(Colorc)//設(shè)置字體例5.9標(biāo)簽的示例import

java.awt.*;import

java.applet.Applet;public

class

label

extends

Applet{//創(chuàng)建一個java小程序

Label

label1,label2;//聲明兩個標(biāo)簽對象public

void

init()

{label1=new

Label();label1.setText("你好!我是一個標(biāo)簽!");label2=new

Label("你好!我是另外一個標(biāo)簽!");label2.setBackground(Color.yellow);//設(shè)置背景和前景顏色label2.setForeground(Color.red);add(label1);add(label2);}public

void

paint(Graphics

g)

{//下面的方法我們在后面學(xué)習(xí),這里簡單介紹一下,第一個參數(shù)是輸出的內(nèi)容//后面兩個整數(shù)參數(shù)為輸出坐標(biāo)(左上角)g.drawString("label1的文本是:"+label1.getText(),15,100);g.drawString("label2的文本是:"+label2.getText(),60,140);}}二、按鈕Button

1.創(chuàng)建Button類對象格式:public

Button([String

str])2.按鈕事件:按鈕事件必須實現(xiàn)ActionListener接口,例如:public

class

b

implements

ActionListenerbtn.addActionListener(this);//按鈕加事件監(jiān)聽器然后在事件處理方法actionPerformed中進(jìn)行編程例如: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);//加事件監(jiān)聽器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.創(chuàng)建TextField類對象格式:public

TextField([String

str])//參數(shù)str表示缺省值

public

TextField(int

n)//參數(shù)n表示列數(shù)public

TextField(String

s,int

n)2.文本框事件:在文本框中按下回車鍵將會引發(fā)ActionEvent事件,需要實現(xiàn)ActionListener接口中的actionPerformed方法,同時如果文本框中的內(nèi)容發(fā)生了改變,將引發(fā)

TextEvent事件,需要實現(xiàn)TextListener接口中的

textValueChanged方法3.方法:public

String

getText()//取得文本框內(nèi)容public

String

getSelectedText()//取得文本框中被選擇的內(nèi)容public

void

setText(String

s)//設(shè)置文本框的內(nèi)容public

void

setEchoChar(char

c)//設(shè)置回顯字符

public

void

setEditable(boolean

b)//設(shè)置文本框是否可以編輯public

void

setBackground(Color

c)//設(shè)置背景顏色

public

void

setForeground(Color

c)//設(shè)置前景顏色例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);//創(chuàng)建標(biāo)簽并向右對齊lblPWD=new

Label("請輸入密碼",LablblTip=new

Label();tfName=newTextField("",15);//創(chuàng)建文本框,大小為15列tfName.addTextListener(this);//添加監(jiān)聽器

tfPWD=new

TextField("",10);tfPWD.setEchoChar('#');//設(shè)置回顯字符

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());}}四、文本區(qū)TextArea創(chuàng)建TextArea類對象格式:public

TextArea()public

TextArea(int

r,intc)//指定行數(shù)r列數(shù)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//沒有滾動條文本區(qū)事件:文本區(qū)內(nèi)容發(fā)生變化會引發(fā)TextEvent事件,引入接口TextListener,使用其抽象方法textValueChanged。給文本區(qū)ta1加事件監(jiān)聽器:ta1.addTextListener(this);3.方法:public

String

getText()//取得文本區(qū)內(nèi)容

public

void

setText(String

s)//設(shè)置文本區(qū)內(nèi)容public

void

append(String

s)//將s追加到文本區(qū)中

public

int

getCaretPosition()//取得當(dāng)前插入位置

public

void

insert(String

s,int

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

String

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

int

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

public

int

getSelectionEnd()//取得選定文本的結(jié)束位置public

void

replaceRange(String

ss,int

s,int

e)//用ss代替文本區(qū)從

s開始到e結(jié)束的內(nèi)容。例5.12文本區(qū)的示例

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();}}五、復(fù)選框Checkbox1.創(chuàng)建Checkbox類對象格式:public

Checkbox([String

str])public

Checkbox(String

s,boolean

是否選中)2.復(fù)選框事件:復(fù)選框選擇或取消變化會引發(fā)ItemEvent事件,引入接口ItemListener,使用其抽象方法itemStateChanged。給復(fù)選框chk1加事件監(jiān)聽器:chk1.addItemListener(this);3.方法:public

void

setState(boolean

state)//設(shè)置復(fù)選框狀態(tài)public

booleangetState()//取得復(fù)選框狀態(tài)

public

String

getLabel()//取得復(fù)選框標(biāo)題例5.13復(fù)選框的示例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個復(fù)選框?qū)ο髷?shù)組

TextField

tf;public

voidinit(){add(new

Label("請選擇興趣愛好"));for(int

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

Checkbox(interesting[i]);//創(chuàng)建復(fù)選框?qū)ο?/p>

add(C[i]);C[i].addItemListener(this);//添加監(jiān)聽器}tf=new

TextField(40);//創(chuàng)建文本框?qū)ο?/p>

add(tf);}//當(dāng)復(fù)選框的狀態(tài)發(fā)生改變時,將引發(fā)該事件

public

void

itemStateChanged(ItemEvent

e){String

s="";for(int

i=0;i<6;i++){if(C[i].getState())//如果復(fù)選框C[i]處于選中狀態(tài){if(s!="")s=s+"、"+C[i].getLabel();elses=C[i].getLabel();}}if(s!="")tf.setText("您的興趣愛好為:"+s);elsetf.setText("您沒有選擇興趣愛好!");}

}六、單選框單選框?qū)嶋H是將若干個Checkbox包含在一個叫CheckboxGroup的類中來實現(xiàn)的,所以我們要使用單選框必須先創(chuàng)建一個選框組

CheckboxGroup對象,然后再創(chuàng)建若干個Checkbox對象,并將它們加到選框組中。格式:先定義選框組:CheckboxGroup

group=new

CheckboxGroup()再通過定義Checkbox創(chuàng)建單選框:public

Checkbox(String

str,boolean

state,CheckboxGroupgroup)單選框事件:參見復(fù)選框事件。例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創(chuàng)建下拉列表Choice類對象格式:先定義一個空列表:Choice

choice=new

Choice()再通過addItem(“選項”)或add(“選項”)方法增加選項下拉列表事件:參見復(fù)選框事件,但應(yīng)該通過如下方法獲得下拉列表事件源:

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)//刪除指定位置或內(nèi)容的選項public

void

removeAll()//刪除所有選項public

void

getItem(int

pos)//取得指定位置選項

public

void

getItemCount()//取得選項總數(shù)例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("請在文本框中輸入要追加的內(nèi)容");add(choice1);choice1.addItemListener(this);//給列表框加事件監(jiān)聽器

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());//追加內(nèi)容

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

choice1.insert(tf.getText(),0);//在第一行插入新內(nèi)容

if(e.getSource().equals(btn3))choice1.remove(choice1.getSelectedIndex());//刪除所選內(nèi)容if(e.getSource().equals(btn4))choice1.removeAll();//刪除所有內(nèi)容}}八、列表List1.創(chuàng)建列表List類對象格式:public

List([int

rows])public

List(int

rows,boolean

multipleMode)通過add(“選項”)或add(“選項”,int

index)方法增加選項

2.列表事件:單擊觸發(fā)ItemEvent事件,由ItemListener接口中的

ItemStateChanged()方法處理事件,用getItemSelectable()方法獲得事件源。用addItemListener(this)方法添加監(jiān)聽器。雙擊觸發(fā)ActionEvent事件,由ActionListener接口中的actionPerformed()方法處理事件,用getSource()方法獲得事件源。用addActionListener(this)方法添加監(jiān)聽器。3.方法:public

int

getSelectIndex()//取得被選項索引號public

int[]getSelectIndexes()//取得多個被選項索引號

public

String

getSelectItem()//取得被選項public

String[]

getSelectItems()//取得多個被選項

public

intgetItemCount()//取得選項數(shù)public

void

select(int

index)//選定指定選項

public

int

getRows()//取得可視行數(shù)public

void

remove(intpos|String

str)//刪除指定位置或內(nèi)容的選項

public

void

removeAll()//刪除所有選項publicvoiddeselect(intpos)//取消選定指定位置的選項public

boolean

isIndexSelected(int

pos)//判斷指定選項是否被選中

public

void

setMultipleMode()//設(shè)置多選或單選模式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);//創(chuàng)建一個可顯示5行的多選模式列表對象TextField

tf;public

void

init(){list1.add("

");add(list1);list1.addItemListener(this);//添加列表的單擊監(jiān)聽器list1.addActionListener(this);//添加列表的雙擊監(jiān)聽器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();//取得所有被選項并放入數(shù)組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電腦屏幕的尺寸是有限的,我們不可能每次都剛好將輸出內(nèi)容完全顯示在屏幕上,所以要顯示超出屏幕大小的內(nèi)容時我們就需要利用滾動條。下面我們看如何創(chuàng)建滾動條Scrollbar:1.格式:public

Scrollbar(int

o,int

v,int

l,int

min,int

max)其中:o—可取Scrollbar.HORIZONTAL和Scrollbar.VERTICALv—滑塊的初始位置l—滑塊的大小min,max—滾動條的最大和最小值

2.滾動條事件:滑塊位置改變將觸發(fā)AdjustmentEvent事件,應(yīng)該引入接口:AdjustmentListener,其抽象方法為:djustmentValueChanged。給滾動條增加事件監(jiān)聽器slider.addAdjustmentListener(this)用如下方法獲得滾動條事件源:

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

int

getValue()//取得滑塊當(dāng)前的值public

void

setBlockIncrement(intn)//設(shè)置滑塊增量(單擊滾動條空白地方)public

void

setUnitIncrement(int

n)//設(shè)置滾動條單位增量(單擊箭頭按鈕)public

int

getMaximum()//取得滾動條最大值

public

int

getMinimum()//取得滾動條最小值public

int

getOrientation()//取得滾動條種類(水平、垂直)public

void

setMaximum(int

n)//設(shè)置滾動條最大值

public

void

setMinimum(int

n)//設(shè)置滾動條最小值public

void

setOrientation(int

n)//設(shè)置滾動條種類(水平、垂直)public

void

setValue(int

n)//設(shè)置滾動條目前的值例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);//添加事件監(jiān)聽器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();//強(qiáng)制轉(zhuǎn)換事件源為滾動條對象if(sb.getOrientation()==Scrollbar.HORIZONTAL)//如果是水平滾動條x=sb.getValue();elsey=sb.getValue();btn1.setLocation(x,y);//按滾動條的當(dāng)前值重新定位按鈕btn1.setLabel("當(dāng)前位置

("+x+","+y+")");//設(shè)置按鈕文字}}十、滾動面板ScrollPane上面介紹的滾動條在使用上有許多的不方便,我們必須進(jìn)行事件處理才能達(dá)到我們的要求,那么有沒有辦法讓程序自己決定是否需要滾動呢?AWT中右一個帶有滾動條的Panel,即ScrollPane,它單獨(dú)使用時和Panel一樣,沒有什么區(qū)別。我們必須將所有組件放到一個Panel中,再將Panel放在ScrollPane中即可。要創(chuàng)建ScrollPane很簡單,其構(gòu)造函數(shù)如下:public

ScrollPane()//不帶任何參數(shù),按默認(rèn)方式創(chuàng)建

public

ScrollPane(inttype)其中type有三種取值:ScrollPane.SCROLLBARS_AS_NEEDED—按需要顯示滾動條

ScrollPane.SCROLLBARS_NONE—不需要顯示滾動條

ScrollPane.SCROLLBARS_ALWAYS—永遠(yuǎn)都要顯示滾動條

ScrollPane不需要我們?nèi)ヌ幚頋L動事件,一切都是自動的例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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論