大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 其他相关 -> java swing常用的9种组件

java swing常用的9种组件

时间: 2021-07-31 作者:daque

在java1.0中,仍旧有一个用来gui编制程序的类库awt(abstract window toolkit),称之为笼统窗口东西箱。可惜的是,awt中的组件(比方按钮,类名为button)在实行中运用了当地代码(native code),那些组件的创造和动作是由运用步调地方平台上的当地gui东西来处置的。所以,awt组件要在各别的平台上供给给用户普遍的动作就遭到了很大的控制。同声,awt组件中还生存很多bug,这就使得运用awt来开拓跨平台的gui运用步调艰巨重重。

1996年,sun公司和netsacpe公司在一个称为swing的名目中协作完备了netsacpe公司从来开拓的一套gui库,也即是此刻所谓的swing组件。swing组件和从来的awt组件实足各别,最大的辨别即是swing组件的实行中没有运用当地代码,如许对底层平台的依附型就大为贬低,而且不妨给各别平台的用户普遍的发觉。其余,和从来的awt比拟,swing中供给了实质更多、运用更为简单的组件。

在观赏少许书本时,常会遇到动词jfc(java foundation class)。jfc的观念是在1997年的javaone开拓者常会上初次提出的,是指用来建立gui的一组api。本质上,swing不过jfc的一局部,其它的再有二维图形(java 2d)api以及拖放(drag and drop)api之类。

swing并不是实足代替了awt,swing不过运用更好的gui组件(如jbutton)包办awt中相映的gui组件(如button),而且减少了少许awt中从来所没有的gui组件。而且,swing仍运用awt 1.1的事变处置模子。

固然此刻awt组件仍获得扶助,然而倡导在你的运用步调中尽管运用swing组件和1.1的事变模子。

1.标签 (jlabel)

标签 (jlabel)常常是用来标识其余一个组件的含意。以在标签上表露笔墨、图象或是笔墨图象的拉拢。

jlabel labtext=new jlabel(“文本标签”);

labtext.settext("文本标签");

imageicon icon = new imageicon("image/greenflag20.gif");

jlabel labimage=new jlabel(icon);

labimage.seticon(icon);

2.暗号框 (jpasswordfield)

暗号框本质上是一种特出典型的文本框,用户不妨向个中输出文本并加以编纂。和文本框各别的是,向暗号框中输出文本时,表露的不是本质输出的文本,而是特出的回显字符(常常是'*')。不妨运用setechochar(char c)本领来变换缺省的回显字符。

须要提防的是,博得文本框中的文本时,运用本领gettext(),该本领归来的是一个string典型的东西;而要博得暗号框中的文本,运用本领getpassword(),该本领归来的是一个char数组。

比方,创造了一个暗号框:

jpasswordfield txtpwd=new jpasswrodfield(20);

设定该暗号框的回显字符为'#':

txtpwd.setechochar('#');

博得暗号框中的实质:

char []pwd=txtpwd.getpassword();

也不妨简单地将char数组变化为string典型的东西:

string pwdstr=new string(txtp.getpassword());

3.菜单

(1)菜单也是一种常用的gui组件,菜单沿用的是一种档次构造,最高层是菜单栏(jmenubar);在菜单栏中不妨增添几何个菜单(jmenu),每个菜单中又不妨增添几何个菜单选项(jmenuitem)、分割线(separator)或是菜单(称之为子菜单)。

(2)建立运用步调的菜单时,先创造一个菜单栏:

jmemubar menubar=new jmenubar();

常常运用框架的setjmenubar(jmenubar amenubar)本领将菜单栏置于框架中:

frame.setjmenubar(menubar);

随后,创造所须要的各菜单并逐一增添到菜单栏中,比方:

jmenu menudbaccount=new jmenu("电度表出帐(c)");

...

jmenu menusysconfig=new jmenu("体例树立(x)");

menubar.add(menudbaccount);

...

menubar.add(menusysconfig);

结果,向各个菜单中增添菜单选项、分割线或是子菜单,如图所示的体例树立菜单为例:

//创造菜单选项或是子菜单

jmenuitem sysconfigitem=new jmenuitem("参数树立(s)...");

jmenu viewmenu=new jmenu("表面树立");

jradiobuttonmenuitem metalitem=new jradiobuttonmenuitem("非金属表面");

jradiobuttonmenuitem classicitem=new jradiobuttonmenuitem("保守表面");

jradiobuttonmenuitem modernitem=new jradiobuttonmenuitem("新颖表面");

jmenuitem cascadeitem=new jmenuitem("层叠窗口(c)");

jmenuitem iconifyitem=new jmenuitem("陈设图标(i)");

//将三个单选按钮增添到一个按钮组

buttongroup group=new buttongroup();

group.add(metalitem);

group.add(classicitem);

group.add(modernitem);

//建立子菜单

viewmenu.add(metalitem);

viewmenu.add(classicitem);

viewmenu.add(modernitem);

//增添到体例树立菜单

menusysconfig.add(sysconfigitem); //增添菜单选项

menusysconfig.add(viewmenu); //增添子菜单

menusysconfig.add(cascadeitem); //增添菜单选项

menusysconfig.addseaparator(); //增添分割线

menusysconfig.add(iconifyitem); //增添菜单选项

(3)常常的菜单选项是jmenuitem,也不妨运用复选框或是单选按钮典型的菜单选项,辨别是jcheckboxmenuitem和jradiobuttonmenuitem。和jradiobutton一律,运用jradiobuttonmenuitem时,须要将它们增添到同一个按钮组中。

(4)当点击一个菜单选项时,会天生一个举措事变(actionevent) 。为菜单选项增添事变侦听器就不妨侦听其举措事变,比方:sysconfigitem.addactionlistener(alistener);

(5)为一个菜单或是菜单选项树立赶快键:

menusysconfig.setmnemonic('x');

sysconfigitem.setmnemonic('s');

(6)即使须要赶快采用未翻开的菜单中的菜单选项或是子菜单,不妨运用加快键。比方,当蓄意按下ctrl+l时就连忙选中lockitem菜单选项,而尽管lockitem地方的菜单能否仍旧翻开,就不妨运用底下的本领为lockitem树立加快键:

keystroke ks= keystroke.getkeystroke( keyevent.vk_l,inputevent.ctrl_mask);

lockitem.setaccelerator(ks);

4.弹出式菜单

(1)弹出式菜单(jpopupmenu)是一种特出的菜单,和普遍菜单的辨别在乎其不恒定在菜单栏中,而是不妨到处浮动的。

(2)底下的语句创造了一个弹出式菜单:

jpopupmenu popup=new jpopupmenu();

与向菜单中增添菜单选项、分割线或是子菜单一律,运用同样的本领向弹出式菜单中增添实质。

用户不妨经过点击某个特出的鼠标键(称为触发器)来触发弹出式菜单。比方,在windows操纵体例上,普遍是鼠标右键。

为此,运用步调中该当监听弹出式菜单的父组件的鼠标事变:当有鼠标事变爆发时,运用ispopuptrigger()本领来确定能否为弹出式菜单的触发器;即使是,则在该父组件上表露出弹出式菜单。同样以图所表示的弹出式菜单为例,该菜单的父组件是一个表露公司徽目标标签lablogo,当用户在该标签上右击鼠标时,弹出式菜单展示。底下的代码实行了上述功效:

lablogo.addmouselistener(new mouseadapter(){

public void mousereleased(mouseevent e){

if (e.ispopuptrigger()){

popup.show(lablogo,e.getx(), e.gety());

}

}

});

5.东西条

(1)有些菜单选项的运用频次较高,历次运用都要翻开菜单,功效较低。为此,不妨在东西条(jtoolbar)中供给与那些菜单选项对立应赶快按钮,以普及用户的功效。东西条中常常是少许带有图目标按钮,固然也不妨是其它典型的gui组件,比方拉拢框之类。

(2)常常,东西条所供给的操纵是菜单所能供给操纵的一个子集,手段是不妨赶快考察那些运用频次高的操纵。

(3)东西条常常被置于构造为borderlayout的容器中。东西条被置于构造为borderlayout的一个面板中。东西条再有一个特性:不妨被拖动到地方容器其它边境,以至摆脱其地方的容器。

(4)天生一个东西条东西,不妨运用语句:

jtoolbar toolbar=new jtoolbar();

(5)还不妨在天生东西条时,指明东西条的题目。如许,当东西条摆脱地方容器时,不妨在本人的题目栏表露题目:

jtoolbar toolbar=new jtoolbar("脸色东西条");

(6)向东西条中增添组件,运用add本领:

toolbar.add(btnblue);

toolbar.add(btnyellow);

(7)缺省情景下,组件是依照程度办法逐一增添入东西条的,也不妨在天生东西条时指明以笔直办法来增添组件:

jtoolbar toolbar=new jtoolbar(swingconstants.vertical);

(8)即使蓄意东西条不许挪动,不妨运用setfloatable本领来树立:

toolbar.setfloatable(false);

(9)当东西条中的按钮上只表露图标时,用户大概不许真实领会各个按钮的简直含意。不妨运用东西提醒处置这个题目:

btnyellow.settooltiptext("面板置为黄色");

6.对话框

(1)对话框是用户和运用步调举行交互(对话)的一个桥梁:对话框不妨用来搜集用户的输出数据传播给运用步调,或是表露运用步调的运转消息给用户。

(2)对话框分为形式(modal)和非形式两种。形式对话框居于看来状况时,用户将不许与运用步调的其它窗口举行交互,而非形式对话框则没有此控制。

(3)java中供给了一个类joptionpane用来创造大略的形式对话框,即使蓄意创造非形式对话框或是自设置对话框不妨运用jdialog。

(4)joptionpane类中供给了4种静态本领,用以表露4种常用的对话框:

showmessagedialog 动静对话框

showinputdialog 输出对话框

showconfirmdialog 确认对话框

showoptiondialog 选项对话框

(5)joptionpane 对话框重要由如次几个局部形成:图标、动静以及按钮。

(6)类joptionpane中设置了如次五个恒量:

joptionpane.question_message

joptionpane.information_message

joptionpane.warning_message

joptionpane.error_message

joptionpane.plain_message   //不运用图标

前四个恒量对应着四个图标,第六个恒量表白不运用图标。开拓职员不妨运用那些恒量来指定对话框中表露的图标。固然,对话框也供给了本领使得开拓职员不妨运用本人的图标。

(7)joptionpane对话框不只仅不妨表露字符串典型的动静,还不妨表露其它典型的动静。比方,不妨是一副图片、还不妨是一个gui组件。更普遍地说,这边的动静不妨是任何典型的东西或是东西数组。在书上的例子中,你不妨看到各别典型动静的运用。

(8)joptionpane对话框底部的按钮在于于对话框典型和选项典型。比方,对于确认对话框,不妨运用如次的四种选项典型之一:

default_ option

yes_no_option

yes_no_cancel_option

ok_cancel_option

(9)即使安排一个囊括两个标签、一个文本输出框、一个暗号输出框和两个按钮的登录对话框,那些gui组件被增添到一个运用了网格袋构造的面板panel中,面板panel又被增添到logindialog的实质窗格。类logindialog接受了jdialog,先来看一下logindialog的建立器:

public logindialog(frame f,string s,boolean b)

该建立器中包括了3个参数,f和s辨别是对话框的父窗口和题目,布尔典型的参数b用来决定对话框的典型,当取值为true时,表白是形式对话框;取值为false时,表白利害形式对话框。

7.表格

(1)表格(jtable)也是一种常用的gui组件,常用来表露洪量的数据。

(2)表格是模子-视图-遏制器安排形式的一个典范运用。表格自己并不保存所表露的数据,数据本质上是保存在表模子中的,表格不过表模子的一种视图.

(3)jtable供给了如次两种建立器,不妨简单地创造大略表格:

jtable(object[][] data, object[] columnnames)

jtable(vector data, vector columnnames)

(4)沿用上述本领不妨创造生存不少缺陷:比方,每一列的宽窄都是一律的;未能精确表露日子;数值未能依照咱们的蓄意保持到少量点反面两位,并靠右表露;表格中的数据必需预先寄存在一个数组中或是向量(vector)平淡等。在一个真实的运用步调中,运用如许的表格是不许满意本质运用的诉求的。

(5)在缺省情景下,表格中每列是等宽的,而且安排某列的宽窄时,其它列的宽窄也会相映机动安排。不妨运用底下的语句封闭列宽机动安排个性:

table.setautoresizemode(jtable.auto_resize_off);

之后,要设定某列的宽窄,开始按照该列的列名博得列东西,以设定第一列宽窄为例:

tablecolumn col=table.getcolumn(columnnames[0]);

而后挪用setpreferredwidth本领设定该列宽窄:

col.setpreferredwidth(200);

(6)前方仍旧提到,表格有一个对应的表模子,数据是保存在表模子中,表格是表模子的视图。表格在创造视图时总须要机动挪用表模子中的少许本领,那些本领的归来值确定了最后的视图。局部常须要用到的本领的称呼和含意如次:

public int getrowcount();//博得行数

public int getcolumncount();//博得列数

public object getvalueat(int row, int column); //博得指定单位格的数据

//指定单位格能否承诺编纂

public boolean iscelleditable(int row, int column);

public string getcolumnname(int column); //博得指定列的列名

public class getcolumnclass(int column);

缺省表模子defaulttablemodel供给了上述本领的缺省实行。比方,defaulttablemodel中的iscelleditable本领老是归来true,表白一切的单位格都承诺编纂; getcolumnclass本领老是归来object.class.

(7)不妨运用defaulttablemodel创造一个表模子东西,而后再运用表模子创造表格,比方:

defaulttablemodel model=new defaulttablemodel(0,5);//0行5列的表模子

jtable table=new jtable(model);

而后,不妨运用model的addrow、removerow本领向表模子中增添或是简略数据,对表模子增加和删除数据的截止会机动反应到表格视图上去。

然而,常常情景下,咱们并不径直运用defaulttablemodel。更多的景象是接受defaulttablemodel类,并掩盖个中局部本领以到达特出的诉求.

8.树形控件

(1)jtree结构因变量:

a.jtree():创造一棵体例默许的树。

b.jtree(hashtable value):运用hashtable创造树,不表露root node(根节点).

c.jtree(object[] value):运用object array创造树,不表露root node.

d.jtree(treemodel newmodel):运用treemodel创造树。

e.jtree(treenode root):运用treenode创造树。

f. jtree(treenode root,boolean asksallowschildren):运用treenode创造树,并确定能否承诺子节点的生存.

g.jtree(vector value):运用vector创造树,不表露root node.

(2)jtree上的每一个节点就代办一个treenode东西,treenode自己是一个interface,内里设置了7个相关节点的本领,比方确定能否为树叶节点、有几个子节点(getchildcount())、父节点何以(getparent())之类、那些本领的设置你不妨在javax.swing.tree的 package中找到,读者群可自行查看java api文献。

(3)在本质的运用上,普遍咱们不会径直实作此界面,而是沿用java所供给的 defaultmutabletreemode类,该类是实作mutabletreenode界面而来,并供给了其余很多适用的本领。

mutabletreenode自己也是一个interface,且接受了treenode界面该类主假如设置少许节点的处置办法,比方新增节点(insert())、简略节点(remove())、树立节点(setuserobject())等。所有联系如次图:

treenode----extends--->mutabletreenode---implements---defaultmutabletreenode

(4)咱们来看怎样利defaultmutabletreenode来创造jtree,咱们先来看defaultmutabletreenode的结构因变量: defaultmutabletreenode结构因变量:

defaultmutabletreenode():创造空的defaultmutabletreenode东西。

defaultmutabletreenode(object userobject):创造defaultmutabletreenode东西,节点为userobject东西。

defaultmutabletreenode(object userobject,boolean allowschildren):创造defaultmutabletreenode东西,节点为userobject东西并确定此节点能否承诺具备子节点。

(5)除去以节点的看法(treenode)创造树除外,你不妨用data model的形式创造树。树的data model称为treemodel,用此形式的长处是不妨触发关系的树事变,来处置树大概爆发的少许变化。treemodel是一个interface,内里设置了8种本领;即使你是一个爱好本人发端做的人,或是你想表露的数据方法很搀杂,你不妨商量径直实作treemodel界面中所设置的本领来结构出jtree.treemodel界面包车型的士本领如次所示:

treemodel本领: void addtreemodellistener(treemodellistener l):减少一个treemodellistener来监察和控制treemodelevent事变。

object getchild(object parent,int index):归来子节点。

int getchildcount(object parent):归来子节点数目.

int getindexofchild(object parent,object child):归来子节点的索引值。

object getroot():归来根节点。

boolean isleaf(object node):确定能否为树叶节点。

void removetreemodellistener(treemodellistener l):简略treemodellistener。

void valueforpathchanged(treepath path,object newvalue):当用户变换tree上的值时怎样应你不妨实作出这8种本领,而后结构出本人想要的jtree,然而在大部份的情景下咱们常常不会如许做,究竟要实作出这8种本领不是件很轻快的事,并且java自己也供给了一个默许形式,叫作defaulttreemodel,这个类仍旧实作了treemodel界面,也其余供给很多适用的本领。运用这个默许形式,咱们便能很简单的结构出jtree出来了。底下为defaulttreemodel的结构因变量与典型:

defaulttreemodel结构因变量:

defaulttreemodel(treenode root):创造defaulttreemodel东西,并定出根节点。

defaulttreemodel(treenode root,boolean asksallowschildren):创造具备根节点的defaulttreemodel东西,并确定此节点能否承诺具备子节点。

(6)当树的构造上有任何变换时,比方节点值变换了、新增节点、简略节点等,城市treemodelevent事变,要处置如许的事变必需实作treemodellistener界面,此界面设置了4个本领,如次所示: treemodellistener本领:

void treenodeschanged(treemodelevent e):当节点变换时体例就会云挪用这个本领。

void treenodesinserted(treemodelevent e):当新增节时体例就会去挪用这个本领。

void treenodesremoved(treemodeevent e):当简略节点时体例就会去挪用这个本领。

void treestructurechanged(treemodelevent e):当树构造变换时体例就会去挪用这个本领。

(7)treemodelevent类自己供给了5个本领,帮咱们博得事变的消息,如次所示: treemodelevent本领:

int[] getchildindices():归来子节点群的索引值。

object[] getchildren():归来子节点群.

object[] getpath():归来tree中一条path上(从root nod到leaf node)的节点。

treepath gettreepath():博得暂时场所的tree

path. string tostring():博得蝗字符串表白法.

(8)由treemodelevent的gettreepath()本领就不妨获得treepath东西,此东西就不妨让咱们领会用户暂时正式选举哪一个节点, treepath类最常用的本领为: public object getlastpathcomponent():博得最深(内)层的节点。

public int getpathcount():博得此path上公有几个节点.

9.jscrollbar 震动条

(1)结构因变量

myslider = new jscrollbar(jscrollbar.horizontal ,

0 , 1 , 0 , integer.max_value);

震动条目标

滑块初始场所

滑块尺寸

震动槽最小值

震动槽最大值

(2)本领

int getvalue()   归来滑块暂时场所

setunitincrement(1); 树立单元增量(点按两头箭镞)

setblockincrement(50); 树立块增量(点按震动槽)

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.