版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 汽輪機(jī)和水輪機(jī)檢修工操作水平知識考核試卷含答案
- 遺體防腐整容師崗前安全技能考核試卷含答案
- 氧化擴(kuò)散工崗前操作安全考核試卷含答案
- 量具制造工安全知識宣貫評優(yōu)考核試卷含答案
- 盾構(gòu)機(jī)操作工測試驗證能力考核試卷含答案
- 護(hù)理質(zhì)量與團(tuán)隊協(xié)作
- 數(shù)控技術(shù)職業(yè)發(fā)展趨勢
- 企業(yè)風(fēng)險管理與防范制度
- 2026年及未來5年市場數(shù)據(jù)中國液晶模組行業(yè)發(fā)展監(jiān)測及投資策略研究報告
- 2026年及未來5年市場數(shù)據(jù)中國化妝品檢測行業(yè)市場發(fā)展現(xiàn)狀及投資方向研究報告
- 成人呼吸支持治療器械相關(guān)壓力性損傷的預(yù)防
- DHA乳狀液制備工藝優(yōu)化及氧化穩(wěn)定性的研究
- 2023年江蘇省五年制專轉(zhuǎn)本英語統(tǒng)考真題(試卷+答案)
- 三星-SHS-P718-指紋鎖使用說明書
- 岳麓書社版高中歷史必修三3.13《挑戰(zhàn)教皇的權(quán)威》課件(共28張PPT)
- 2007年國家公務(wù)員考試《申論》真題及參考答案
- GC/T 1201-2022國家物資儲備通用術(shù)語
- 污水管網(wǎng)監(jiān)理規(guī)劃
- GB/T 6730.65-2009鐵礦石全鐵含量的測定三氯化鈦還原重鉻酸鉀滴定法(常規(guī)方法)
- GB/T 35273-2020信息安全技術(shù)個人信息安全規(guī)范
- 《看圖猜成語》課件
評論
0/150
提交評論