Java圖形用戶接口

Java圖形用戶接口

對一個優秀的應用程序來講,良好的圖形用戶接口是必不可少的。缺乏良好的圖形用戶接口,將會給用戶理解和使用應用程序帶來不少不便。很難想象用戶爲了學會使用一個應用程序,去記一大堆命令。Java提?copy;了生成一個良好的圖形用戶接口所須要的一?copy;基本元件:面板(Panel?copy;、按鈕(Button?copy;、標?copy;(Label?copy;、畫板(Canvases?copy;、滾動條(Scrollbar?copy;、列表框(List?copy;、文本域(TextField?copy;、文本區(TextArea?copy;。java

6.1面板

面板提?copy;了創建應用程序的空間。你能夠把圖形元件(包括其餘面板?copy;放在一個面板上。Applet類提?copy;了一個基本的面板。canvas

6.1.1佈局管理

Java提?copy;了幾種佈局:順序佈局(FlowLayout?copy;、邊界佈局(BorderLayout?copy;和網格佈局(GridLayout?copy;。app

6.1.1.1順序佈局

順序佈局(FlowLayout?copy;是最基本的一種佈局,面板的缺省佈局就是順序佈局。順序佈局指的是把圖形元件一個接一個地?reg;平地放在面板上。下面是一個順序佈局的例子:ide

importjava.awt.*;importjava.applet.Applet;函數

publicclassmyButtonsextendsApplet{Buttonbutton1,button2,button3;publicvoidinit(){button1=newButton("肯定");button2=newButton("打開");button3=newButton("關閉");add(button1);add(button2);add(button3);}}佈局

該程序生成的佈局以下:網站

圖6.1url

6.1.1.2邊界佈局

邊界佈局包括五個區:北區、南區、東區、西區和中區。這幾個區在面板上的分佈規律是「上北下南,左西右東」。下面是一個邊界佈局的例子:spa

importjava.awt.*;importjava.applet.Applet;ssr

publicclassbuttonDirextendsApplet{

ButtonbuttonN,buttonS,buttonW,buttonE,buttonC;

publicvoidinit(){setLayout(newBorderLayout());buttonN=newButton("?reg;");buttonS=newButton("火");buttonE=newButton("木");buttonW=newButton("金");buttonC=newButton("土");add("North",buttonN);add("South",buttonS);add("East",buttonE);add("West",buttonW);add("Center",buttonC);}}

下面是該程序運行的結果:

圖6.2

6.1.1.3網格佈局

網格佈局把面板分紅一個個的網格,你能夠給出網格的行數和列數。下面是一個網格佈局的例子:

importjava.awt.*;importjava.applet.Applet;

publicclassbuttonGridextendsApplet{Buttonbutton1,button2,button3,button4,button5,button6,button7,button8;

publicvoidinit(){setLayout(newGridLayout(4,2));button1=newButton("乾");button2=newButton("坤");button3=newButton("艮");button4=newButton("震");button5=newButton("坎");button6=newButton("離");button7=newButton("巽");button8=newButton("兌");add(button1);add(button2);add(button3);add(button4);add(button5);add(button6);add(button7);add(button8);}}

下面是該程序運行的結果:

圖6.3

6.2按鈕

6.2.1按鈕事件

用戶點一下按鈕,就會有一個按鈕事件發生。你能夠經過覆蓋一個applet的action成員函數來捕捉按鈕事件。

publicbooleanaction(Evente,Objecto){if(e.targetinstanceofButton){system.out.println((string)o);}else{System.out.println("Non-buttonevent");}returntrue;}

6.2.2按鈕類型

Java提?copy;了標準的按壓式按鈕,同時也提?copy;了選擇式按鈕和標記式按鈕。

6.2.2.1選擇式按鈕

選擇式按鈕提?copy;了從幾個選項中選一個選項的功能。下面是從幾個市中選一個市的例子,市名放在選擇式按鈕中:

CityChooser=newChoice();

CityChooser.addItem("北?copy;");CityChooser.addItem("上海");CityChooser.addItem("天津");

add(CityChooser);

圖6.4

6.2.2.2標記式按鈕

標記式按鈕的狀態做爲標記框事件的對象參數返回。下面是一個標記式按鈕的例子:

CheckboxfillStyleButton;fillStyleButton=newCheckbox("Solid");

publicbooleanaction(Evente,Objectarg){if(e.targetinstanceofCheckbox){System.out.println("Checkbox:"+arg);}returntrue;}

圖6.5

6.2.2.3按鍵式按鈕

按鍵式按鈕是一組按鈕,用戶能夠選中其中一個,同時這一組中的其餘按鈕將被關閉。下面是一個按鍵式按鈕的例子:publicclassCheckBoxextendsApplet{CheckboxGroupcbg;

publicvoidinit(){cbg=newCheckboxGroup();add(newCheckbox("one",cbg,true));add(newCheckbox("two",cbg,false));add(newCheckbox("three",cbg,false));}}

圖6.6

6.2.3自包含按鈕

Java語言的面向對象特性使咱們可以建立徹底自包含的按鈕。在自包含按鈕裏,你能夠在?copy;展按鈕類裏創建事件控制函數。下面是一個自包含按鈕的例子:

importjava.awt.*;importjava.applet.Applet;

classokButtonextendsButton{

publicokButton(){setLabel("Ok");}

publicbooleanaction(Evente,Objectarg){System.out.println("OKButton");returntrue;}}

publicclassbuttontestextendsApplet{okButtonmyOkButton;

publicvoidinit(){myOkButton=newokButton();add(myOkButton);}}

圖6.7

6.3標?copy;

標?copy;是一種放到面板上的靜止的正文。下面是一個標?copy;的例子:importjava.awt.*;importjava.applet.Applet;

publicclasslabelextendsApplet{

publicvoidinit(){setLayout(newFlowLayout(FlowLayout.CENTER,10,10));Labellabel1=newLabel("你好!");Labellabel2=newLabel("另外一個標?copy;");add(label1);add(label2);}}

下面是運行結果:

圖6.8

6.4列表框

列表框使用戶易於操做大量的選項。建立列表框的方法和Choicebutton有?copy;類似。列表框的全部條目都是可見的,若是選項不少,超出了列表框可見區的範圍,則列表框的旁邊將會有一個滾動條。首先,建立列表框:Listl=newList(4,false);這個成員函數建立了一個顯示4行的列表框。第二個參數「false"表示這個列表框是單選的,若是是「true",則表示是多選的。下面增長列表框的選項:

l.addItem("北?copy;大學");l.addItem("清華大學");l.addItem("吉林大學");l.addItem("復?copy;大學");l.addItem("南開大學");l.addItem("天津大學");l.addItem("南?copy;大學");add(l);

圖6.9

6.4.1在列表框中進行選擇

能夠用成員函數getSelectedItem()或getSelectedItems()來接收在列表框中被選的選項。在單選列表框裏,「雙擊」一個選項就能夠觸發一個可被action()成員函數捕捉到的事件。publicbooleanaction(Evente,Objectarg){...if(e.targetinstanceofList){System.out.println("Listentry:"+arg);}...}

6.4.2多選列表框

對於多選列表框,要使你的選擇產生做用,須要使用其餘的外部事件。例如,你可使用按鈕事件:

圖6.10

publicbooleanaction(Evente,Objectarg){...if(e.targetinstanceofButton){...if("Ok".equals(arg)){string[]selected;selected=l.getSelectedItems();for(intI=0;I<selected.length;I++){System.out.println(selected[i]);}}}}

6.5文本域

文本域通常用來讓用戶輸入象姓名、信用卡號這樣的信息,它是一個可以接收用戶的鍵盤輸入的小塊區域。

6.5.1建立文本域

在建立文本域時,有四種類型?copy;你選擇:空的、空的而且具備指定長度、帶有初始文本內容的和帶有初始文本內容並具備指定長度的。下面是生成這四種文本域的代碼:

TextFieldtf1,tf2,tf3,tf4;

//空的文本域tf1=newTextField();//長度爲20的空的文本域tf2=newTextField(20);//帶有初始文本內容的文本域tf3=newTextField("你好");//帶有初始文本內容並具備指定長度的文本域tf4=newTextField("你好",30);add(tf1);add(tf2);add(tf3);add(tf4);

圖6.11

6.5.2文本域事件

當用戶在文本域裏敲「回車」鍵時,就產生了一個文本域事件。象其餘事件同樣,你能夠以在成員函數action()中捕捉到這個事件。

publicbooleanaction(Evente,Objectarg){...if(e.targetinstanceofTextField){System.out.println("TextField:"+arg);}...}

6.6文本區

文本區能夠顯示大段的文本。

6.6.1建立文本區

與文本域相似,建立文本區時也有四種類型?copy;選擇,但若是指定文本區的大小,必須同時指定行數和列數。

TextAreata1,ta2;//一個空的文本區ta1=newTextArea();

//一個帶有初始內容、大小爲5x40的文本區ta2=newTextArea("你好!",5,40);

能夠用成員函數setEditable()來決定用戶是否可對文本區的內容進行編輯。

//使文本區爲只讀的ta2.setEditable(false)

圖6.12

6.6.2接收文本區的內容

能夠用成員函數getText()來得到文本區的當前內容。例如:System.out.println(ta1.getText());文本區自己不產生本身的事件。但你能夠用外部事件來接收文本區的內容:

publicbooleanaction(Evente,Objecto){if(e.targetinstanceofButton){if("send".equals(o)){StringtextToSend=ta1.getText();System.out.println("sending:"+textTosend);mySendFunction(textToSend);}}else{...}}

6.7畫板

畫板可以捕捉到?copy;露事件、鼠標事件和其餘相似的事件。基本的畫板類不處理這?copy;事件,但你能夠?copy;展它來建立有你所需功能的畫板類。

6.7.1建立畫板

importjava.awt.*;importjava.applet.Applet;

publicclasssuperGUIextendsApplet{...myCanvasdoodle;...publicvoidinit(){...//創建咱們的畫板doodle=newmyCanvas();doodle.reshape(0,0,100,100);leftPanel.add("Center",doodle);...}}

classmyCanvasextendsCanvas{publicvoidpaint(Graphicsg){g.drawRect(0,0,99,99);g.drawString("Canvas",15,40);}}

6.7.2畫板事件

你能夠覆蓋通常的事件處理成員函數。下面是一個包含了mouseDown事件處理的例子:

importjava.awt.*;importjava.applet.Applet;

publicclasscanvasextendsApplet{

Buttonb1;

publicvoidinit(){//SetourlayoutasaBorderstylesetLayout(newBorderLayout(15,15));b1=newButton("Test");myCanvasc1=newmyCanvas(100,100);//addthecanvasandthebuttontotheappletadd("Center",c1);add("South",b1);}

publicbooleanaction(Evente,Objectarg){System.out.println("Event:"+arg);returntrue;}

publicbooleanmouseDown(Evente,intx,inty){System.out.println("Mouseworks:("+x+","+y+")");returntrue;}}

classmyCanvasextendsCanvas{privateintwidth;privateintheight;

publicmyCanvas(intw,inth){width=w;height=h;reshape(0,0,w,h);}

publicvoidpaint(Graphicsg){g.setColor(Color.blue);g.fillRect(0,0,width,height);}

publicbooleanmouseDown(Evente,intx,inty){if((x<width)&&(y<height)){System.out.println("Canvasmouseworks:("+x+","+y+")");returntrue;}returnfalse;//NotourmouseDown}}

6.8滾動條

在某?copy;程序中,須要調整線性的值,這時就須要滾動條。滾動條提?copy;了易於操做的值的範圍或區的範圍。

6.8.1建立滾動條

當建立一個滾動條時,必須指定它的方向、初始值、滑塊的大小、最小值和最大值。

publicScrollbar(intorientation,intinitialValue,intsizeOfSlider,intminValue,intmaxValue);

下面是一個例子:

ScrollbarredSlider;publicvoidinit(){redSlider=newScrollbar(Scrollbar.VERTICAL,0,1,0,255);add(redSlider);}

圖6.13

6.8.2滾動條事件

和其餘接口元件同樣,滾動條產生一個你能夠控制的事件,但和其餘事件不一樣,你必須直接使用成員函數handleEvent(),而不能使用成員函數action().

publicbooleanhandleEvent(Evente){if(e.targetinstanceofScrollbar){System.out.println("Scrollbar:"+((Scrollbar)e.target).getValue());returntrue;}returnsuper.handleEvent(e);}

6.8.3滾動條的值的顯示

若是你想顯示滑塊所在位置的值,須要加一個本身的文本域。下面是一個例子。

importjava.awt.*;importjava.applet.Applet;

publicclassredSliderextendsApplet{Scrollbarredslider;TextFieldredvalue;Labelredlabel;

publicvoidinit(){setLayout(newGridLayout(1,3));redslider=newScrollbar(Scrollbar.HORIZONTAL,0,1,0,255);redvalue=newTextField("0",5);redvalue.setEditable(false);redlable=newLabel("Red(0-255)");add(redlabel);add(redslider);add(redvalue);}

publicbooleanhandleEvent(Evente){if(e.targetinstanceofScrollbar){redvalue.setText(Integer.toString(((Scrollbar)e.target).getValue()));returntrue;}returnsuper.handleEvent(e);}

publicbooleanaction(Evente,Objectarg){System.out.println("Event"+arg);returntrue;}}

圖6.14

本章小結

1.Java提?copy;了生成一個良好的圖形用戶接口所須要的一?copy;基本元件:面板(Panel?copy;、按鈕(Button?copy;、標?copy;(Label?copy;、畫板(Canvases?copy;、滾動條(Scrollbar?copy;、列表框(List?copy;、文本域(TextField?copy;、文本區(TextArea?copy;。2.大部分元件都有本身的事件,你能夠捕捉並處理它們。

瞭解更多詳情請登陸超人學院網站http://www.crxy.cn或者每週日晚八點半相約免費公開課 https://ke.qq.com/course/53102#term_id=100145289  具體詳情請聯繫QQ2435014406

相關文章
相關標籤/搜索