java在路上基础篇_第1页
java在路上基础篇_第2页
java在路上基础篇_第3页
java在路上基础篇_第4页
java在路上基础篇_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、java在路上基础篇(二)关于swing程序设计基础一个较为复杂的程序,需要有一个个小的部件来构成:一般而言按照这样的顺序由小及大的 操作,即首先创建好按钮组件,然后将按钮组件放置在面板上面,之后将面板插在容器中, 最后将容器添加到窗体上面。1、jframe窗彳本窗体就是一个组件容器,所有的组件都是必须要有窗体去承载他们cjframe就是一个窗体类, 可以通过继承java.swing.jframe类来创建一个窗体。一个窗体包括一个容器类,这个容器作 为jframe类的一个封装属性,需要通过调用getcontentpane()7j法來获取它。它有带参数和 不带参数两种构造方法,窗体创建好之后程序

2、默认是不可见的,需要调用show ()方法, 但是这屮方法逐渐被setvisible (true)取代屮。2、布局管理器(绝对布局,流布局,边界布局、网格布局)绝对布局就是说硬性的指定组件在容器中的大小和位置。使用绝对布局管理的步骤如下:(1) 使用 container.setlayout(null)方式収消布局管理(2)使用 component.setbounds()a法來设 置每个组件的大小和位置。流布局就是在本行之中先居中,然后根据本行满了之后到下一行还是居中,如此递归下去。构造方法有三个。边界布局组件的位置是分布在容器的东西南北中五个位置。这个是默认的布局方式。网格布局管理器,就是划分

3、网格的,构造方法有两个,可以实现对网格的行列操作,对网格的间距设置。常用的面板(jpanel面板、jscrollpane面板)面板也是一种容器因为其也是继承java.awt.container的,jpanel除了可以添加组件之外还是 可以设置布局管理的。jscrollpane ffil板是带滚动条的面板,这个的实现视为了可以再较小的 容器之中看到较多的内容4、标签(jlable)其包含有四个构造方法,就是设置带图标和带文本的作用。扩展的可以使用 javax.swing.lmagelcon 来创建图标5按钮组件(jbutton普通按钮、j radiobutton单选、jcheckbox m选框)

4、jbutton创建普通的样式按钮,如“确定,取消”等,有四个构造方法。jradiobutton有选中 与未选中两种状态,五个构造方法,图标文本出事状态设置。单选按钮的组合使用 buttongroup来讲按钮分组,改类使用默认构造方法创建,通过add ()方法将按钮添加到 期中,组合起来的按钮添加到按钮组以后,同一时间只能有一个单选的按钮时被选屮的。 jcheckbox也有两种状态,它不需要设置按钮组。6、文本组件(jtextfield 、 jpasswordfield、jtextarea )文本框组件单行的,文本域则是多行的区域可以使用seteditable(true/false)來设置是否可

5、编 辑。密码框和文本的唯一区别就是在于密码的可见性。7、列表组件(jcombobox下拉式川st列表框)和进度条创建进度条的构造方法有四个,默认情况下进度条是不显示同时信息的,但是可以通过调用 setstringpainted (booleanb)设置是否显示提示信息。如果将扌旨示确定进度的进度条设置为 显示提示信息,默认显示当前完成任务的百分比参考下面的一个创建进度条实例。package text;import java.awt.borderlayout;import javax.swi ngf rame;import javax.swi nglabel;import javax.swing

6、progressbar;import javax.swing.windowc onstants;public class progress extends jframe private static jprogressbar progressbar;public progress()setdefaultcloseoperation(windowconstants.exit_on_close); 设置默认的关 闭方式 progressbar = new jprogressbar();/ 创建进度条 progressbar.setstringpainted(true);/ 显示进度文本 getco

7、ntentpane().add(progressbar,borderlayout.center);/添加到面板,并设置位置 setbounds(100,100,300,78);fin al jlabel label = new jlabelf);getcontentpane().add(label,borderlayout.north);label.settext(”产品正在升级");setvisible(true);public static void main(string args) new progress();/创建窗体progressbar.setlndeterminat

8、e(true);/ 设置进度条为不确定的样式for(int i = 0; i <= 100; i+)通过进度提哦啊更新任务完成百分比try thread.sleep(loo);/令当前的线程休眠0.1秒 catch (interruptedexception e) e.printstacktrace();progressbar.setvalue(i);/ 设置进度条数值progressbar.setlndeterminate(false);/ 设置釆用确定进度条 progressbar.setstring("升级成功! ”);8、swing的一个小的实战练习。下面是一个只有程序

9、界面但是没有程序的实际操作的代码:package text;import java.awt.borderlayout;import java.awt.gridlayout;import javax.swi ngbutt on;import javax.swingf rame;import javax.swi ngpanel; import javax.swing .jtextfield;import javax.swing.swingconstants;/* * author fuweiwei* version2012-05-07*/public class calculator extend

10、s jframe public static void main(string args) calculator frame = new calculator();/创建窗体/* *初始化界面的构造方法*/public calculator()super();settitle(“计算器”);设这标题setboundsfloo,100,221,242);/设置位置,宽度高度setdefaultcloseoperation(jframe.exit_on_close); 设置默认的关闭操作final jpanel viewpanel = new jpanel();/创建输入框面板getcontent

11、pane().add(viewpanel,borderlayout.north);/将面板添加到窗体中jtextfield textfiled = new jtextfield();/创建输入框 textfiled.settext("o");/设置输入框的默认值 textfiled.setcolumns(18);/ 设置输入框的列数 textfiled.seteditable(false);/ 设置文本编辑不可用 textfiled.sethorizontalalignment(swingconstants. right); viewpanel.add(textfiled)

12、;/将文本框添加到面板中 getcontentpane().add(viewpa nel,borderlayout.north);/将输入框添加到窗体的顶部 final jpanel buttonspanel = new jpanel();/创建输入按钮而板 final gridlayout girdlayout = new gridlayout(4,0,5,5);/创建网格布局管理器 buttonspanel.setlayout(girdlayout);/ 输入按钮面板使用网格布局 getcontentpane().add(buttonspanelzborderlayout.south);/

13、 将输入按钮添加到 面板的 南部string inputbuttonnames =”4”,”5丁6丁“,”7打89“,“*”,“.tot“厂; 定义输入按钮名称数组for(int row = 0; row<inputbuttonnamesength;row+)for(int col = 0; col<inputbuttonnames.length;col+)fin al jbutton butt on = n ew jbutt on (inputbutt onn amesrowcol);创建输入按钮button.setname(row+""+col);/设置输入

14、按钮的名称,由其所在行和列的索引 來组成buttonspanel.add(button);/将按钮添加到按钮面板中final jpanel clearbuttonpanel = new jpanel();/创建清除面板getcontentpane().add(clearbuttonpanel,borderlayout.center);/ 将面板添加到 窗体的 中间string clearbuttonnames = " ce 罗 c t <= ”;/定义清除按钮面板for(int i = o;i<clearbuttonnamesength; i+)fin al jbutto

15、n button 二 new jbutton(clearbutt onn amesi);创建清除按钮clearbuttonpanel.add(button);/将清除按钮添加到清除按钮面板中setvisible(true);/ 显示窗体高级swing学习一.列表1.1儿ist构件jlist显示对象列表并且允许用户选择一个或多个项的组件。单独的模型listmodel维护列表的内容。string word = ,r7,2'7,3h;jlist list = new jlist(word);一般jlist都是滚动的,但是java有滚动而板,普通组件不能自动滚动jscollpane scoll

16、pane = new jscollpane(list);然后把滚动而板插入都外围面板上。默认jlist能显示8个选项,但是可以setvisiblerowcount设置显示。jlist.vertical-垂直排放所有选项jlist.vertical_wrap如果选项超过可视列,开始新的一列jlist.horizontal_wrap如果选项超过可视行,开始新的一行public void setselectionmode(int selectionmode)对选择模式进行设置如果允许多选,列表返回的值object o = list.getselectedvalues();如果不允许多选,返回的值st

17、ring s = (string)list.getselectedvalue();java代码1.package swinglist;2.3.import java.awt.borderlayout;4.import java.awt.eve nt.actio neve nt;5.import java.awt.eve nt action liste ner;6.7.import javax.swing.butt on group;8.import javax.swi ngf rame;9.import javax.swi nglabel;10.import javax.swing j lis

18、t;11.import javax.swingpanel;12.import javax.swi ngradiobutt on;13.import javax.swi ngscrollpa ne;14jmport javax.swing.event.listselectioneve nt;15.import javax.swi ng.event.listselecti on listener;16.17.public class listframe extends jframe 18.19.private static final int default_width = 400;20. pri

19、vate static final int default_height = 300;21. private jpanel listpanel;22. private jlist word list;23. private jlabel label;24. private jpanel buttonpanel;25. private button group group;26. private string prefix = “the h;27. private string suffix = hfox jumps over the lazy dog.h;28.29.public listfr

20、ame()30. settitle("listtest");31, setsize(default_widthz default_height);32.33.string words=,l'7,123,7,36n/,72,;,46'7,67,/',15,/,54,/,34'7,23v,ds,7,22'7,12h;34. wordlist = new jlist(words);35. wordlist.setvisiblerowco un t(4);36scrollpane scrollpane = new jscrollpane(wo

21、rdlist);37.38.listpanel = new jpanel();39jistpaneladd(scrollpane);40.41.wordlist.addlistselectionlistener(new listselectionlistener() 42.43.override44. public void valuecha nged(listselecti on eve nt e) 45. / todo auto-generated method stub 46.0bject values = wordlist.getselectedvalues();47.48.strin

22、gbuilder text = new stringbuilder(prefix);49.for(int i=0;i<values.length;i+)50.string word = (string)valuesi;51. text.appe nd(word);52. text.append("");53. 54. text.appe nd(suffix);55.label.settext(text.tostring();56. 57. );58.59.buttonpanel = new jpanel();60. group = new butt on group(

23、);61. makebutton("vertical", «ilist.vertical);62. makebutton("vertical wrap", jlist.vertical_wrap);63. makebutton("horizontial wrap",儿ist.horizontal_wrap);64. add(listpanel,borderlayout. north);65abel = n ew jlabel(prefix+suffix);66. add(label,borderlayout.center);

24、67. add(buttonpanel,borderlayout.south);68. 69.70.private void makebutton(string label, final int o)72radiobutton button = new jradiobutton(label);72.buttonpanel.add(button); 73.if(group.getbuttoncount()=0)74. butt on .setselected(true);75. 76. group.add(butt on);77. butt on .addactio nlistener(new

25、actio nliste ner() 78.79.override80. public void actionperformed(actionevent e) 81. / todo auto-generated method stub 82.wordlist.setlayoutorientation(o);83.listpa nel.revalidate();84. 85. );86. 87. package swinglist;import java.awt.borderlayout;import java.awt.event.actionevent;import java.awt.eve

26、nt. actio nusten er;import javax.swing.butt on group;import javax.swing jf rame;import javax.swi nglabel;importjavax.swinglist;importjavax.swi ngpanel;importjavax.swingradiobutton;importjavax.swing jscrollpa ne;importjavax.swing.event.listselectionevent;import javax.swing.event.listselectionlistener

27、;public class listframe extends jframe private static final int default_width = 400;private static final int default_h eight = 300;private jpanel listpanel;private j list wordlist;private j label label;private jpanel butt onpan el;private butt on group group;private stri ng prefix = hthe n;private s

28、tri ng suffix = "fox jumps over the lazy dog."public listframe()settitle("listtest");setsize(default_width, default_height);stri ng words=,l";,2,;,123,;,36,;,72,;,46,;,67,;,15,;,54,;,34,;,23,;,ds',;,22,;,12,;wordlist = new jlist(words);wordlist.setvisiblerowcount(4);jscr

29、ollpa nescrollpa ne=newjscrollpane(wordlist);listpa nel=newj panel();listpanel.add(scrollpane);wordlist.addlistselectionlistener(newlistselectionlistener()overridepublic void valuecha nged(listselecti on event e) / todo auto-ge nerated method stubobject values =wordlist.getselectedvalues();stri ngbu

30、ildertext = newstrin gbuilder(prefix);for(inti=0;i<values.le ngth;i+)stri ngword=(stri ng)valuesi;text.appen d(word);text.appe nd(h");text.append(suffix);label.settext(text.tostring(););buttonpanel = new j panel();group = new buttongroupojmakebuttonc'vertical",jlist.vertical);makebu

31、tton("verticalwrap",jlist.vertical_wrap);makebutton("horizontialwrap",jlist.horizontal_wrap);add(listpanel,borderlayout.north);label=newjlabel(prefix+suffix);add(label,borderlayoutcenter);add(buttonpan el,borderlayout.south);pri vate void makebutt on (string label, final int o)jr

32、adiobutt on butt on = new jradiobutton(label);buttonpanel.add(button);jf(group.getbuttoncount()=0)button.setselected( true);group.add(button);button.addactionlistener(new actionlistener() overridepublic void actio nperformed(actio nevente) / todo auto-generated methodstubwordlist.setlayoutorientati

33、on (o);listpanel.revalidate(););1.2列表模式j list显示的列表是固定不变的,但是现实牛活中式可变的,但是jlist并没有对列表增删的 操作,这是因为jlist只是负责数据的可视化外观,而是用列表模型来获取数据的。public interface listmodel int getsize();object getelementat(int index);addlistdatalistener(listdatalistener i); /增加元素时,通知 jlist removelistdatalistener(listdatalistener i); /删

34、除元素时,逋知 jlist这个接口并没有指定数据时怎么样存储的,而且它也没有强制要求这些对象被存储,无论何 时getelementato,它都会重新计算获得,这样的好处是如果一个数组很大,那样这样的设计 是很有用的。1.3值的插入和移除不能氏接编辑列表集合,必须先获得列表模型listmodel model = list.getmodel();1. 4值的绘制jlist不仅仅现实字符串列表,也可以显示icon对象填充的数组或者向量,只需要在儿ist安 装一个自定义的列表单元格绘制器。java代码*2just fontlist = new jlist(fonts.toarrayo);3. font

35、ust.setvisiblerowcount(4);4. fontlist.setselectionmode(listselectionmodel.single_selection);5fontlist.setcellrenderer(new fontcelirenderer();* /jljstfontlistnewjlist(fonts.toarrayo);fontlist.setvisiblerowcount(4);fontlist.setselectionmode(listselectionmodel.single_selection);fontlist.setcellrenderer

36、(new fontcelirenderer();/* * * */java代码i. class fontcelirenderer extends jpanel implements listcelirenderer23. public component getlistcelirenderercomponent(jlist list, object value, int index,4. boolean isselected, boolean cellhasfocus)5. 6. font = (font) value;7. background = isselected ? list.get

37、selectionbackground(): list.getbackground();8. foreground = isselected ? list.getselectionforeground(): list.getforeground();9. return this;10. ii. 12.public void paintcomponent(graphics g)13. 14.string text = font.getfamilyf);15. fontmetrics fm = g.getfontmetrics(font);16. g.setcolor(backgro und);1

38、7. g.fillrect(0, 0, getwidth(), getheight();18. g.setcolor(foregro und);19. g.setfont(font);20. g.drawstring(text, 0, fm.getascent();21. 22.23. public dimension getpreferredsize()24. 25.string text = font.getfamily();26. graphics g = getgraphics();27. f on tmetrics fm = g.getfontmetrics(fo nt);28. r

39、eturn new dimension(fm.stringwidthftext), fm.getheight();29. 30.31. private font font;32. private color background;33. private color foreground;34. class fontcelirenderer extends j panel implements listcelirendererpublic componentgetlistcelirenderercomponent(jlist list, object value, int index,boole

40、an isselected,boolean cellhasfocus) font = (font) value;background = isselected ?list.getselecti on background!) : list.getbackgro un d();foregro und = isselected ?list.getselectionforeground() : hst.getforeground();return this; public voidpaintcomponent(graphics g) string text = font.getfamily();fo

41、ntmetrics fm = g.getfontmetrics(font);g.setcolor(background);g.fillrect(o, 0,getwidth(), getheight();g.setcolor(foregro und);g.setf on t(font);g.drawstring(text, 0, fm.getascent();public dimension getpreferredsize()string text = font.getfamily(); graphics g = getgraphics(); fontmetrics fm=g.getfontm

42、etrics(font); return new dimension(fm.stringwidth(text), fm.getheight(); private font font;private color background;private color foreground;component getlistcellrenderercomponent(jlist list, /正在绘制的列表object value, /由 list.getmodel().getelementat(index)返回的值。int index, /单元格索引 boolean isselected,boolea

43、n cellhasfocus /如杲指定的单元格拥有焦点,则为true二树一棵树是由一些节点(node)组成,每个节点要么是叶节点或者是孩子节点除了根节点(root node),每个节点都有唯一父节点,一棵树有且唯一个根节点,有时每棵树都有自己的根节点,那么它是森林2.1简单的树jtree遵循模型一一视图一一控制器模式,构造一个jtree组件,需要提供一个树模型jtree tree= new jtree(new treemodel();然而树模型是由节点组成的treenode.treemodel接口的默认实现类是defaulttreemodel,treenode的默认实现类是defaultmu

44、tabletreenode.treenode root二;defaulttreemodel defaulttreemodel = new defaulttreemodel(root);defaultmutabletreenode root= new defaultmutabletreenode(,rooth);defaultmutabletreenode childl= new defaultmutabletreenode("childl");root.add(childl);从上面不难看出,树模型就是由根节点构成的模型,然后将所有节点贯穿起来,最后形成树 模型。java代

45、码1.package swing.simple;2.3.import javax.swi ngf rame;4.import javax.swi ngpanel;5.import javax.swingscrollpane;6.import javax.swing jtree;7.import javax.swing.tree.defaultmutabletreenode;8.import javax.swing.tree.defaulttreemodel;9.import javax.swing.tree.treemodel;10.11.public class simpletree ext

46、ends jframe 12.13. public simpletree() 14. settitle("simple tree");15. setsize(400, 400);16. / treemodel model = new defaulttreemodel(): 17.defaultmutabletreenode root = newdefaultmutabletreenode("中国”);18. defaultmutabletreenode cityl = new defaultmutabletreenode(nj匕京”);19.20. default

47、mutabletreenode city2 = new defaultmutabletreenode("c徽”);21.22.defaultmutabletreenode city3 = new defaultmutabletreenode("上海”);23.24. defaultmutabletreenode cityll = new defaultmutabletreenode("海淀”);25.26.defaultmutabletreenode cityl2 = new defaultmutabletreenode("朝阳”);27.28.defa

48、ultmutabletreenode city21 = new defaultmutabletreenode安庆”);29.30.defaultmutabletreenode city22 = new defaultmutabletreenode("合肥”);31.32. root.add(cityl);33. root.add(city2);34. root.add(city3);35. cityl.add(cityll);36. cityl.add(cityl2);37. city2.add(city21);38. city2.add(city22);39.40.treemode

49、l model = new defaulttreemodel(root);41.42 jtree tree = new jtree(model);43.44. add(new jscrollpane(tree);45. 46.47.package swing.simple;importjavax.swi ngframe;importjavax.swi ngpan el;importjavax.swi ngscrollpa reimportjavax.swingtree;importjavax.swing.tree.defaultmutabletreenode;importjavax.swing

50、.tree.defaulttreemodel;importjavax.swing.tree.treemodel;public class simpletree extends jframe public simpletree)settitle(hsimpletreeh);setsize(400,400);/treemodelmodel=newdefaulttreemodel():defaultmutabletreenoderoot =new defaultmutabletreenode(h中国h);defaultmutabletreenodecityl=newdefaultmutabletre

51、enode北 乐"defaultmutabletreenodecity2=newdefaultmutabletreenodef'安徽h);defaultmutabletreenodecity3=newdefaultmutabletreenode("上海h);defaultmutabletreenodecityll=newdefaultmutabletreenodef*海淀h);defaultmutabletreenodecityl2=newdefaultmutabletreenode朝阳h);defaultl/lutabletreenodecity21=newdef

52、aultmutabletreenode安庆h);defaultl/lutabletreenodecity22=newdefaultmutabletreenode(h合肥,);root.add(cityl);root.add(city2);root.add(city3);cityl.add(cityll);cityl.add(cityl2);city2.add(city 21);city2.add(city22);treemodel model = new defaulttreemodel(root);jtree tree = new jtree(model);add(new jscrollpa

53、 ne(tree);要显示这些树,结点绘制器需要绘制三个图标,一个是叶子结点图标,一个闭合的文件图标, 还有一个开启的文件夹图标。有时候我们添加一个结点时,根本不知道它是否还有子节点。 这吋,你可以设置node.setallowschildren(true);然后绘制图标时,告诉模型需要子节点, mode.setaskssetallowschildre n(true);编辑树和树的路径jtree能处理的实际上不是树的结点,而是树的路径。treepath管理树路径情况。treepath path = tree.getselectionpath();defaultmutabletreenode n

54、ode = (defaultmutabletreenode )path.getlastpathcomponent();现在你拥有了当前结点,那么如果使用node.add(newnode)來编辑结点,是行不通的,因为 它只是更新了模型,而视图还没有被更新,所以需要通知视图也要更新。不过有更简单的方 法。public void model.insertnodelnto(mutabletreenode newchild, /新结点mutabletreenode parent, /当前结点int index) 位置java代码1. class treeeditframe extends jframe

55、2. public treeeditframe() 3. settitle("treeedittest");4. setsize(default_width, default_height);5.6./ con struct tree 7.8.treenode root = makesampletree();9. model = new defaulttreemodel(root);10. tree = new jtree(model);11. tree.seteditable(true);12.13. / add scroll pane with tree 14.15sc

56、rollpane scrollpane = new jscrollpane(tree);16.add(scrollpane, borderlayout.center);17.18.makebuttons();19. 20.21. public treenode makesampletree() 22. defaultmutabletreenode root = new defaultmutabletreenode(,world,');23. defaultmutabletreenode country = new defaultmutabletreenodecsa1');24. root.add(co un try);25. defaultmutabletreenode state = new defaultmutabletreenode(,californiah);26. country.add(state);27. defaultmutabletreenode city = new defaultmutabletreenodef'san joseh);28.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论