仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 977|回复: 8
打印 上一主题 下一主题

[学习教程] JAVA网页设计JFC/Swing活学活用系列之定制JList显现...

[复制链接]
蒙在股里 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:12:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
再说第三点:我并没有提到服务器也要整合,然后是IDE,一个好的IDE能够200%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。显现  点击这里下载源文件
  弁言

  在图形用户界面方面(GUI),Java一向没法与C++、PB、Delphi之类对抗,利用初期Java/AWT包所开辟的界面其实是让人不敢奉承。跟着JFC/Swing的日益成熟,开辟出与能够与C++媲美的GUI不再是"不成能完成的义务"。除具有丰厚的界面组件以外,以下优异的特征更让Swing为虎傅翼。Swing是以100%纯Java完成的,且辅以JDK1.1轻量级UI框架为基本,没有当地代码,自力于操纵体系以外,基于MVC计划形式、接纳可拔出的表面感到(PL&F),这都让我们不由得往感觉一下她的魅力。

  完全的JFC非常伟大,Swing只是个中的一部分,本文将侧重于Swing包中的JList组件和怎样定制显现。

  JList基本常识

  由JList类代表的Swing列表显现一个可拔取对象列表,它撑持三种拔取形式:单拔取、单距离拔取、多距离拔取。

  基于MVC的构建头脑,JList类不保护对它所显现的那些对象的援用,而是把数据办理事情托付给一个完成ListModel接口的对象;JList类不合错误其显现对象的拔取操纵举行跟踪和保护,而是把拔取办理的事情托付给一个完成ListSelectionModel接口的对象;JList类不绘制其所显现的对象,而是把列表单位的绘制事情托付给一个完成ListCellRenderer接口的对象。

  JList组件把三个次要的事情(数据处置、列表项拔取、单位绘制)交给别的对对象来完成,JList的每一个实例都保护对上述对象的援用,如许年夜年夜下降了各个功效模块的耦合度,易于扩大和保护。

  JList怎样显现对象列表?

  缺省情形下,JList对象对图标和字符串对象会依照原样显现,而关于别的一切对象只显现对象toString()办法的前往值。举个例子吧,有如许一个使用程序显现java.util.Locale对象列表给用户,用户能够经由过程选择列表中的项目来改动使用程序所的处的言语情况。

  设想一下,JList将怎样显现一个包括了Locale对象的数据模子呢?JList委派javax.swing.ListCellRenderer来显现这些对象。正如我们所料,ListCellRenderer将把对象toString()办法的前往值显现出来。但是,Locale对象前往的是ISO代码,如许的显现一定是不切合"界面交互友爱"准绳的。默许情形下JList所显现的内容让年夜多半用户感应稀里糊涂,以下图所示:



  再来看上面这个例子,更恰到好处地申明了JList对象的缺省显现其实不能对用户供应任何成心义的数据。假定一个画图程序供应了色彩选择列表,大概你会从当选择一种色彩用于添补,大概用于绘制线条,大概干甚么都能够。只管我们将java.awt.Color对象实例放进JList中的作法是中规中矩的,但用户却不克不及从中失掉任何的匡助,这背叛了我们的初志。以下图所示:


  Color对象toString()办法前往的是三原色红、绿、蓝(RGB)各份量的亮度值,而不管它所体现的详细色彩是甚么。除非用户晓得所拔取的第六行0、255、0所代表的是绿色彩,要末我们就应当在这个地位显现一些对用户更有匡助的信息。

  固然,你大概能够把java.lang.String对象的实例放进JList中以替换Color对象的实例,但这么做却保持了利用JList的目标:用户是要从列表当选用一种色彩并不是是拔取一段文本形貌。

  当利用Color对象时,JList的监听变更的监听器前往的是用户实践看到的色彩。假如用String对象来替换的话,JList将把String对象前往到监听器,然后监听器再往婚配与之对应的色彩来完成添补操纵,有点画蛇添足的感到。
<P>  追求办理计划

  作为用户,我们但愿的使用程序应当是界面交互明晰了然的,而不是把Locale对象的ISO代码大概是色彩的RGB值显现出来,界面交互友爱的软件才干吸援用户。ISO代码大概RGB值对编程的人来讲也许有效,但其实不合适于终端用户。

  侥幸的是,Locale对象有个displayName属性合适用来为用户显现信息。我们可用该属性来替换toString()办法用于JList的显现,如许一来就可以使得JList更具可读性。对照以下代码片断中Locale对象的toString()办法和getDisplayName办法的前往值:

Locale[]locales={newLocale("en","US"),newLocale("fr","FR"),
newLocale("th","TH"),newLocale("es","MX"),
newLocale("ja","JP")};
System.out.printf("%-10s        %s
","toString","getDisplayName");
System.out.printf("%-10s        %s
","--------","--------------");
for(Localel:locales)
{
 System.out.printf("%-10s        %s
",l.toString(),l.getDisplayName());
}

  在将有中文WindowsXP的呆板上,运转了局以下所示:

toStringgetDisplayName
----------------------
en_US英文(美国)
fr_FR法文(法国)
th_TH泰文(泰国)
es_MX西班牙文(墨西哥)
ja_JP日文(日本)

  Locale对象的displayName属性对用户来讲更具可读性,也更切近用户。假如使用程序里的JList利用displayName属性,那末看起来会是上面的模样:


  那末这个效果是怎样完成的呢?为了让列表在用户界面上有更好的体现,我们要创立本人的ListCellRenderer,如许在下面的例子中就能够经由过程displayName属性来替换默许的toString()办法的前往值。

  相似地,假如我们的选择色彩的使用程序,我们也能够用定制的ListCellRenderer来显现Color对象对应的称号和它们的色彩。以下图所示:


  我们先来懂得一下ListCellRenderer的事情道理,ListCellRenderer接口只界说了一个办法,该办法前往一个组件:

PublicabstractComponentgetListCellRendererComponent(JListlist,Objectvalue,Intindex,booleanisSelected
booleancellHasFocus)

  由getListCellRendererComponent前往的组件的感化就像一个像皮钤记,它把这个组件绘制到列表中列表项所占的地区。要注重的一点是,列表单位其实不包括这个组件,这个组件只是绘制到列表单位上。这是很主要的,由于不克不及利用这个组件,只能利用这个组件的可见代表来绘制列表单位。

  缺省情形下,JList的实例装备一个绘制器,它是ListCellRenderer接口的一个复杂完成,即DefaultListCellRenderer类。该类扩大了JLabel类,并且能够显现字符串或图标,但不克不及在一个单位中同时显现字符串和图标。

  固然自界说的ListCellRenderer可承继任何Component,但关于上述使用我们拔取的办理计划仍是利用DefaultListCellRenderer的好,由于承继了JLabel,能够便利的设置文本、色彩,乃至图片。参考上面这段代码:

publicComponentgetListCellRendererComponent(JListlist,Objectvalue,
intindex,booleanisSelected,booleancellHasFocus)
{
 super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus);
 Localel=(Locale)value;
 setText(l.getDisplayName());
 returnthis;
}

  renderer先挪用它的超类的getListCellRendererComponent()办法来绘制组件,接上去只必要举行一些复杂的设置就能够了,这里我们利用被选中的Locale对象的getDisplayName()办法的前往值来设置文本。

  有了定制的ListCellRenderer,让JList来利用这个新的renderer就更复杂了,挪用JList对象的setCellRenderer()办法而且把新创立的ListCellRenderer实例作为参数传送出来,就充足了。JList对象将用定制的renderer来展示列内外每一个Locale对象。参考上面的代码片断:

ListCellRendererlocaleRenderer=newLocaleRenderer();
localeList.setCellRenderer(localeRenderer);

  定制Color拔取器的例子与Locale的例子有点分歧。分歧的地方在于,粉饰器不但设置了选项单位的文本内容,还设置了它的色彩与对应的背景致。由于Color对象自己里没有内建的文本名,以是我们必要在色彩名和色彩之间创建映照干系。在这里我们利用HashMap来完成映照操纵。详细代码实例请见参考材料。

  停止语

  最初再提一下对象在JList中是怎样显现的。不用非得依附对象供应的toString()办法,由于我们能够用ListCellRenderer来显现任何想要显现的和对象相干的文本。别的,我们也能够在拔取的作为ListCellRenderer的组件上选用任何色彩或图形来绘制。我们也能够将一样的绘制器使用于JComboBox。利用定制的ListCellRenderer,可使用JList和JComboBox组件来编写用户界面加倍友爱的使用程式。

比如模式、敏捷方法什么的,这些思想好,但是实施的人没有理解而且没有正确运用这些知识导致了开发周期的延长。比如说对象,通过getName()方法不能获取对象的名字。
不帅 该用户已被删除
沙发
发表于 2015-1-20 17:05:44 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
若相依 该用户已被删除
板凳
发表于 2015-1-29 13:13:59 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
再现理想 该用户已被删除
地板
发表于 2015-2-6 01:19:47 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
海妖 该用户已被删除
5#
发表于 2015-2-14 19:49:53 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
admin 该用户已被删除
6#
发表于 2015-3-4 09:59:47 | 只看该作者
是一种突破用户端机器环境和CPU
若天明 该用户已被删除
7#
发表于 2015-3-11 18:10:50 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
小魔女 该用户已被删除
8#
发表于 2015-3-19 06:24:12 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
深爱那片海 该用户已被删除
9#
发表于 2015-3-27 09:11:41 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-26 19:42

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表