共计 7747 个字符,预计需要花费 20 分钟才能阅读完成。
本篇文章给大家分享的是有关如何理解 Java 图形用户接口,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。
Java 图形用户接口
对一个优秀的应用程序来说,良好的图形用户接口是必不可少的。缺少良好的图形用户接口,将会给用户理解和使用应用程序带来很多不便。很难想象用户为了学会使用一个应用程序,去记一大堆命令。
6.1 面板
面板提?copy; 了建立应用程序的空间。你可以把图形元件(包括其他面板?copy; 放在一个面板上。Applet 类提?copy; 了一个基本的面板。
6.1.1 布局管理
Java 提?copy; 了几种布局:顺序布局(FlowLayout?copy;、边界布局(BorderLayout?copy; 和网格布局(GridLayout?copy;。
6.1.1.1 顺序布局
顺序布局(FlowLayout?copy; 是最基本的一种布局,面板的缺省布局就是顺序布局。顺序布局指的是把图形元件一个接一个地?reg; 平地放在面板上。下面是一个顺序布局的例子:
importjava.awt.*;importjava.applet.Applet;
publicclassmyButtonsextendsApplet{Buttonbutton1,button2,button3;publicvoidinit(){button1=newButton( 确定 button2=newButton( 打开 button3=newButton( 关闭 add(button1);add(button2);add(button3);}}
该程序生成的布局如下:
图 6.1
6.1.1.2 边界布局
边界布局包括五个区:北区、南区、东区、西区和中区。这几个区在面板上的分布规律是“上北下南,左西右东”。下面是一个边界布局的例子:
importjava.awt.*;importjava.applet.Applet;
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();
// 一个带有初始内容、大小为 5 ×40 的文本区 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;}}
以上就是如何理解 Java 图形用户接口,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。