java分页表格有插件吗,直接插到java swing 表格或swt图形界面设计器里然后拖到界面上只要导入数据格式

JAVA&SWT&仿visual studio GUI设计器
JAVA(SWT)仿visual studio GUI设计器 网站 : http://git.oschina.net/fireline/Fireline-Design
背景介绍:作者从事 JAVA SWT桌面应用开发多年,深感JAVA 开发的 GUI代码的繁锁与重复 。于是着手开发此设计器,其基于 google 开源项目 windowbuilder pro 之上进行改进,添加了类似visual studio design 中数据集的功能。可以非常方便的在设计器上编辑数据集,管理系统数据集,实时预览数据,轻松填充至界面。还添加了批处理项用于执行数据更新操作。非常方便的生成桌面开发的基本代码,使JAVA桌面开发人员免于痛苦枯燥的编写界面交互代码,极大方便了JAVA 桌面开发人员。有兴趣的朋友可以加QQ一起改进。注:该设计器目前只应用于SWT非swing。先上两张图,有关设计器详细演示请移步:http://my.oschina.net/TommyZgw/blog/296894
设计器安装:
下载Eclipse3.6 (其它版应该也没有问题,我用过在3.7也可以使用)
下载 com.zgw.fireline.bin 然后将“JAVA(SWT)仿visual studio GUI设计器.rar”解压至 eclipse 安装根目录即完成安装。也可 将 WBPro_v0.9.0_UpdateSite_for_Eclipse3.6、fireline_for_Eclipse3.6拷贝至根目录,在将links 拷贝至根目录
重启Eclipse 即完成安装
演示Demo说明:
下载并导入com.zgw.fireline.demo 工程
JDK必须使用 1.6以上版本
demo是一个 ‘产品管理’ 的程序,使用的数据库为 sqlite。直接运行 CpglView.java Main就可运行
CpglView.java 产品管理界面
CpglEdit.java 产品编辑界面
SqliteJdbcImpl 数据库实现,同时也是设计器的数据解析器(IDataBaseProvide 注:该类的修改必须重启Eclipse 才能作用于设计器)
授权协议: GPL
开发语言: Java
操作系统: 跨平台
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.030 (s). 10 q(s)用户名:datanalysis
文章数:204
访问量:32814
注册日期:
阅读量:1297
阅读量:3317
阅读量:448504
阅读量:1133375
51CTO推荐博文
1、Openreports OpenReports提供基于web的灵活报表解决方案,通过浏览器自动生成动态PDF,XLS,HTMLCSV和Chart报表。利用到的开源技术有Hibernate,Veloctiy,Webwork。2、JFreeChart JFreeChart它主要是用来制作各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。3、JasperReports JasperReports是一个基于Java的开源报表工具,它可以在Java环境下像其它IDE报表工具一样来制作报表。JasperReports支持PDF、HTML、XLS、CSV和XML文件输出格式。JasperReports是当前Java开发者最常用的报表工具。4、JFreeReport &JFreeReport是一个用来生成报表的Java类库。它为Java应用程序提供一个灵活的打印功能并支持输出到打印机和PDF, Excel, HTML和XHTML, PlainText, XML和CSV文件中。5、jCharts jCharts是一个100%基于Java的制图工具,它可以输出很多种图表。这个包是通过Servlets显示图表理想选择。6、Cewolf Cewolf可以在一个基于Servlet/JSP的Web应用程序内部使用,以在Web页中嵌入各种复杂的图形图表(如,直方图、饼图、棒图等等)。它提供了一个功能完备的标签库来定义图表的所有属性(颜色、笔画、图例等),嵌入了图表的JSP就不用使用任何Java代码。7、JOpenChart JOpenChart库和工具包提供了创建不同的图表的方法,包括饼图、直方图、和自绘图。它包含了将图表嵌入到Swing 或Web应用程序中的组件,Renderer Interface API可以方便地为不同种类的图表增加新的绘制。8、iReport iReport是为JasperReports设计的强大的,直观的,易于使用的可视化报表设计器采用纯Java开发。这个工具允许用户可视化编辑包含charts,图片,子报表等的复杂报表。iReport 还集成了JFreeChart图表制作包。允许用户可视化地编辑XML JasperDesign文件。用于打印的数据可以通过多种方式获取包括:JDBC, TableModels, JavaBeans, XML,Hibernate(支持HQL查询语言), CSV等。它支持多种输出格式包括:PDF,RTF,XML,XLS,CSV,HTM。9、Chart2D &Chart2D - 一个直观显示数据流量的2维图表(pie,线,垂直条,水平条,分散条(点),合并和覆盖图。有JComponent 和 BufferedImage类图表。10、DataVision DataVision是一个用Java编写的类似于Crystal Reports的报表工具。它支持多种数据源(JDBC, 文本文件) ,输出格式有HTML, XML, PDF, LaTeX, 逗号或tab分隔的数据文件, 和DocBook。它让你用一个支持拖放操作的GUI设计报表,报表描述存储为XML。11、JCCKit JCCKit是一个很小(& 100Kb)而且灵活的图形报表制作框架。12、JSynoptic 它把简单数据源(data source)根据你的需要自动生成各种类型的图表,比如柱状图、饼状图。这个工具核心是 JFreeChart,如果你仅仅需要一些统计图表,而不是做开发,那么这个工具将非常适合你。13、Eclipse BIRT BIRT是一个Eclipse-based开放源代码报表系统。它主要是用在基于Java与J2EE的Web应用程序上。BIRT主要由两部分组成:一个是基于Eclipse的报表设计和一个可以加到你应用服务的运行期组件。BIRT同时也提供一个图形报表制作引擎。14、JERTJERT是一个开放源代码的(Java视线开源项目),基于web的,数据库报表工具,它能够让你不需要编程而能创建各种灵活的报表。(需要了解一定的SQL知识) 。JERT使用到许多优秀的开源项目Hibernate/Spring/Webwork/Sitemesh/FreeMarker。15、ARTART ART是一个轻量级的,基于web的报表引擎。定制容易,支持图形报表,支持通过插件把结果导出为各种格式。16、JChart2d JChart2d是为那些需要精确的图形报表但可以不注重图形报表漂亮的工程任务所提供的一种工具。它有着简洁,可扩展的API和丰富的文档。17、JasperAssistant JasperAssistant是一个JasperReports的可视化报表设计器,一个受欢迎的报表引擎。它构建在Eclipse的插件体系之上,它的主要目的是通过一个直观的图形界面来帮助你开发JasperReports报表定义文件。18、ObjectVisualizer ObjectVisualizer是一个开源的商业化智能工具,属于OpenReports项目的一部分.它依赖于对象持久性技术(Hibernate,JDO,与Cayenne)用来对Object映射的数据进行查询,制表和制图.19、 Fourfive Fourfive是一个领先的开源Web报表解决方案,使用XML作为它的配置文件。支持集群、负载平衡、动态发布、PDF, Excel, LDAP,图表、过滤器、排序、布局定制、门户、JasperReports、Velocity模板、兼容Internet Explorer, Netscape, Mozilla, Opera。20、JooReports JooReports是一个基于OpenOffice.org利用Java创建Office文档与报表的解决方案.模板可利用word处理器进行设计.生成的文档可以是PDF,Word和其它格式.数据源包括POJOs与XML.21、JMagallanes 开源项目JMagallanes是一个用Java/J2EE开发的Olap和动态报表应用程序。JMagallanes结合了静态报表(基于JasperReports),Swing pivot表格(用于OLAP分析),和图表(基于JFreeChart)。它可从多种数据源(如:SQL,Excel,XML和其它)读取数据并可生成多种输出如:PDF,XML,应用程序特殊文件用于将来报表的脱机查看。22、JR Free Web Chart Component JR Free Web Chart Component提供了三种开源的Web Chart组件:FreeWebBarChart4J、FreeWebLineChart4J、FreeWebPieChart4J。这些组件支持3D,支持GIF,JPEG,PNG和SVG等多种图片格式,易于使用。可以在applet中使用,也可以在servlet/JSP中使用。在其主页上还提供了许多可以免费下载的文档,电子书籍,源代码。其中有一些比较常用的开源组件和框架的开发指南如:JFreeChart,JasperReports,Hibernate,Struts,Spring等。23、ReportJet ReportJet是一个基于Java的商业智能和报表系统。ReportJet Designer构建在Eclipse胖客户端平台(RCP)之上,为快速,简单地设计复杂的报表模板提供一个友好的用户界面。24、Carte Carte是一个报表模板引擎能够生成Text(包括HTML与XML)与PDF格式的报表。 所需要的第三方类库包括:Carte CSS,DOM CSS Java类库.iText,生成PDF格式的Java类库.jCharts-基于Java的制图工具包。JCLF,一组Java常用Utilitie.25、SWTJasperViewer SWTJasperViewer是一个专门为基于SWT/JFace应用程序与Eclipse插件开发的JasperReports报表查看组件。26、DynamicJasper DynamicJasper提供了一套高级API用于隐藏Jasper Reports的复杂性。能够帮助开发人员节省设计简单或比较复杂报表所需要发费的时间。能够动态创建报表、在运行期定义字段,字段宽度,分组等。27、FreeReportBuilder FreeReportBuilder是一个用于快速创建简单报表的工具。它具有以下特性: *支持任何带有JDBC驱动的数据库。 *提供FreeQueryBuilder来创建SQL查询而不需要直接写SQL脚本。*支持利用JFreeChart创建图形报表。 *提供JDBC管理器。 *以XML格式加载和保存报表。 *支持拖放任何控件。 *支持在报表中加入图片。 *支持嵌套报表(report in report)。 28、Eastwood Eastwood是JFreeChart的作者开发的一个Servlet仿效Google Chart API提供的功能。Eastwood使用JFreeChart来展示Chart。支持使用与Google Chart API相匹配的encoding来生成饼状图(pie chart),柱状图(bar chart),线状图(line chart)和散点图(scatter plot)。Google Chart API能够利用链接参数来制作各种统计图表。当前Google Chart API能自动生成线形图、柱形图、饼形图、散点图、曲线图。29、Jasper4Flex Jasper4Flex是JasperReports的一个插件,它利用Adobe的Flex SDK把JasperReports生成的文档导成Flash格式。30、gchartjava gchartjava是一个基于Google Chart API来创建图表与图形的开源项目。它让Java开发人员利用简单,直观的API就能够生成charts&graphs。gchartjava只适合在互联网应用程序中使用。31、OFCGWT OFCGWT是一个基于Open Flash Chart2开发,用于GWT应用的开源图表制作组件。32、SWTChart SWTChart是一个基于SWT的轻量级(包括源码整个SWTChart jar文件只有140KB)图表制作组件。它拥有以下基本功能:line chartscatter chartstack chartlog scalecategory axismultiple axesbar chartarea chartstep chartaxis orientationseries label...swtchart33、Report Runner Report Runner是一个轻量级、基于Web的BI系统。它能够按计划产生报表,并输出各种格式包括:pdf、xls、html、rtf,图表和数据表格仪表盘。Report Runner支持通过email、ftp、sftp、smb等各种方式分发报表。34、charts4j charts4j是一个超轻量级(160Kb)Java制图开源类库,基于Google Chart API实现。简单易用,支持Google Chart API大部分特性。提供GWT客户端支持。LineChartExample.example1.jpg35、Jaspersoft Studio Jaspersoft Studio是一个专为JasperReports报表引擎而开发的报表设计器,是iReport设计器的一个完整重构,基于Eclipse平台实现。它能够让你创建包含图表、图片、子报表、交叉表等非常复杂的布局。可以通过JDBC、TableModels、JavaBeans、XML、Hibernate、CSV或自定义数据源来读取数据。可以将报表输出成PDF、RTF、XML、XLS、CSV、HTML、XHTML、text、DOCX或OpenOffice。36、Groovy JFreeChart Builder Groovy JFreeChart Builder这是一个基于JFreeChart的Groovy Builder图表生成开源项目。37、Openchart2 Openchart2是一款完全基于JOpenChart库的二维图表制作软件,在它提供的简洁而又强大的界面下,用户可以很方便的制作出各类二维图表。用户可以有多种图表样式可供选择,比如散列图表、柱状图、圆饼图等等。38、DynamicReports DynamicReports是一个基于JasperReports实现的开源Java报表工具。它能够创建动态的报表设计,而无需可视化报表设计工具。可以非常快地创建报表并生成可以展示和打印的文档,也可以导出各种常见的格式如PDF、Excel、Word等。39、JasperWave JasperWave是一个用于JasperReports的可视化报表设计器。基于Eclipse实现,让所有开发人员不管是高手还是初级入门者能够以非常直观和自然的方式来创建报表。主要特性:
&1、WYSIWYG 所见即所得的报表设计器 &2、支持多种数据源包括:JDBC、XML、Java beans(POJO)、CSV、Excel &3、用于SQL和XML的可视化查询构造器 &4、提供可以制作出20多种图表的类库 &5、支持将报表导出成PDF、RTF、HTML、XLS、XML、CSV等格式。40、DocumentBurster DocumentBurster是一套报表Bursting软件用于处理报表。它能够通过电子邮件、Microsoft SharePoint、FTP、FTPs、SFTP、TFTP、Samba servers、Windows network drives、传真来Burst和分发报表。41、JChartLibJChartLib 是一个用来绘制各种漂亮图表的 Java 类库,支持线图、柱状图,可使用各种颜色、自动处理坐标数值、自动处理样式。另外图表可直接在 Swing 中使用,可保持为 jpg 和 png 格式图片。,
了这篇文章
类别:未分类┆阅读(0)┆评论(0)简述 Java 图形用户界面设计 (Swing) - swing-java- - ITkeyowrd
简述 Java 图形用户界面设计 (Swing)
推荐:  作为一个 Java 程序员,从论坛上感受到使用 Java 开发程序的人越来多,心中不免欣慰。但是,同样是从论坛中, 看到多数人提到 Java 就以为是网络开发——不
作为一个 Java 程序员,从论坛上感受到使用 Java 开发程序的人越来多,心中不免欣慰。但是,同样是从论坛中,看到多数人提到 Java 就以为是网络开发——不是这样的,Java 也可以开发应用程序,而且可以开发出漂亮的图形用户界面的应用程序,也就是 Windows/XWindow 应用程序。因此,我写下这篇文章,希望能带你进入 Java 图形用户界面设计之门。下面,让我们开始……说明:所有代码均在 Windows XP + Eclipse 环境下编写和测试,示例图片均在 Windows XP 下捕捉。目录一. AWT 和 Swing 二. 框架、监听器和事件 三. 按钮、切换按钮、复选按钮和单选按钮 四. 文本输入框、密码输入框 五. 窗格、滚动窗格和布局管理 六. 后记——什么是 SWT (2006年补充)一. AWT 和 Swing?AWT 和 Swing 是 Java 设计 GUI 用户界面的基础。与 AWT 的重量级组件不同,Swing 中大部分是轻量级组件。正是这个原因,Swing 几乎无所不能,不但有各式各样先进的组件,而且更为美观易用。所以一开始使用 AWT 的程序员很快就转向使用 Swing 了。那为什么 AWT 组件没有消亡呢?因为 Swing 是架构在 AWT 之上的,没有 AWT 就没有 Swing。所以程序员可以根据自己的习惯选择使用 AWT 或者是 Swing。但是,最好不要二者混用——除开显示风格不同不说,还很可能造成层次 (Z-Order) 错乱,比如下例:/* * AwtSwing.java * @author Fancy */ import java.awt.BorderL import java.awt.B import javax.swing.JB import javax.swing.JDesktopP import javax.swing.JF import javax.swing.JInternalF import javax.swing.JP public final class AwtSwing ... {publicstaticvoid main(String[] args) ...{AwtSwing as =new AwtSwing();as.show();}JFrame frame =new JFrame(&Test AWT and SWING&);JDesktopPane jdp =new JDesktopPane();JInternalFrame jif1 =new JInternalFrame(&controls&);JInternalFrame jif2 =new JInternalFrame(&cover&);public AwtSwing() ...{frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().add(jdp);jif1.setContentPane(new JPanel());jif2.setContentPane(new JPanel());jif1.getContentPane().setLayout(new BorderLayout());jif1.getContentPane().add(new Button(&AWT Button&), BorderLayout.WEST);jif1.getContentPane().add(new JButton(&Swing Button&),BorderLayout.EAST);jif1.setSize(200, 100);jif2.setSize(200, 100);jdp.add(jif1);jdp.add(jif2);frame.setSize(240, 140);}publicvoid show() ...{frame.setVisible(true);jif1.setVisible(true);jif2.setVisible(true);} }运行这个程序,并用鼠标拖动那个名为“cover”的子窗口,我们会发现一个非常有趣的现象,如图:显然 cover 子窗口是在 controls 子窗口之上的,但是它只罩盖住了 Swing Button,没有罩盖住 AWT Button。再看一会儿,你是不是有这样一种感觉:Swing Button 是“画”上去的,而 AWT Button 则是“贴”上去的。这就是二者混用造成层次错乱的一个例子。Swing 组件有美观、易用、组件量大等特点,也有缺点——使用 Swing 组件的程序通常会比使用 AWT 组件的程序运行更慢。但是大家都还是更喜欢用 Swing 组件,原因何在?因为随着计算机硬件的升级,一点点速度已经不是问题。相反的,用户更需要美观的用户界面,开发人员则更需要易用的开发组件。二. 框架、监听器和事件框架 (Frame, JFrame) 是 Java 图形用户界面的基础,它就是我们通常所说的窗口,是 Windows/XWindow 应用程序的典型特征。说到 Windows/XWindow,大家很容易联想到“事件 (Event) 驱动”。Java 的图形用户界面正是事件驱动的,并且由各种各样的监听器 (Listener) 负责捕捉各种事件。如果我们需要对某一个组件的某种事件进行捕捉和处理时,就需要为其添加监听器。比如,我们要在一个窗口 (JFrame) 激活时改变它的标题,我们就需要为这个窗口 (JFrame 对象) 添加一个可以监听到“激活窗口”这一事件的监听器——WindowListener。怎么添加监听器呢?这通常由组件类提供的一个 addXxxxxListener 的方法来完成。比如 JFrame 就提供有 addWindowListener 方法添加窗口监听器 (WindowListener)。一个监听器常常不只监听一个事件,而是可以监听相关的多个事件。比如 WindowListener 除了监听窗口激活事件 (windowActivate) 之外,还可以监听窗口关闭事件 (windowClosing) 等。那么这些事件怎么区分呢?就靠重载监听器类 (Class) 的多个方法 (Method) 了。监听器监听到某个事件后,会自动调用相关的方法。因此我们只要重载这个方法,就可以处理相应的事件了。不妨先看一个例子:/** * @(#) TestFrame.java * @author James */ import javax.swing. * ; import java.awt.event. * ; public class TestFrame extends JFrame ... {privateint counter =0;public TestFrame() ...{/**//* 使用匿名类添加一个窗口监听器 */addWindowListener(new WindowAdapter() ...{publicvoid windowClosing(WindowEvent e) ...{System.out.println(&Exit when Closed event&);//退出应用程序System.exit(0);}publicvoid windowActivated(WindowEvent e) ...{// 改变窗口标题setTitle(&Test Frame &+ counter++);}});// 设置窗口为固定大小setResizable(false);setSize(200, 150);}publicstaticvoid main(String[] args) ...{TestFrame tf =new TestFrame();tf.show();} }这个例子中,我们设计了一个窗口类(public class TestFrame extends JFrame { ... }),并且为这个窗口添加了一个窗口监听器 (addWindowListener(new WindowAdapter() ...)。而我们添加的这个窗口监听器主要监听了两个事件:窗口关闭 (public void windowClosing(WindowEvent e) ...) 和窗口激活 (public void windowActivated(WindowEvent e) ...)。在窗口关闭事件中我们退出了整个应用程序(System.exit(0);),而在窗口激活事件中,我们改变了窗口的标题 (setTitle(&Test Frame & + counter++);)。最后,我们在 main 方法中显示了这窗口类的一个实例,运行得到下图所示的结果:这个程序的运行结果就是一个什么东西都没有加的框架,也就是一个空窗口。那么,你知道显示一个窗口最主要的几句代码吗?不知道没关系,我来告诉你,显示一个窗口只需要做三件事:生成实例(对象)→设置大小→显示,相应的,就是下面的三句代码:JFrame frame = new JFrame( & Frame's Title & );frame.setSize( 400 , 300 );frame.setVisible( true );也许你会说:第一句的意思我清楚,第三句的意思我也明白,为什么一定要第二句呢?其实想想也就明白了,叫你画一个没法有大小的矩形你能画出来吗?不能。同样,没有大小的窗口,怎么显示?所以我们需要用 setSize(int width, int height) 方法为其设置大小。我们还有另一种方法:用 JFrame 的 pack() 方法让它自己适配一个大小。pack() 在多数时候是令人满意的,但有时,它也会让你哭笑不得——多试试就知道了。在 JFrame 中,我们使用 addWindowListener 方法加入一个监听器 WindowListener (addWindowListener(new WindowAdapter() ...) 去监听发生在 JFrame 上的窗口事件。WindowListener 是一个接口,在 java.awt.event 这个包中,但是上例中好象并没有使用 WindowListener,而是使用的 WindowsAdapter 吧,这是怎么回事?WindowAdapter 是 WindowsListener 接口的一个最简单的实现,也在 java.awt.event 包中。如果我们直接使用 WindowListener 产生一个类,需要实现它的每一个方法 (一共 7 个)。但 WindowAdapter 作为 WindowListener 最简单的实现,已经实现了它的每一个方法为空方法 (即只包含空语句,或者说没有语句的方法)。用 WindowAdapter 就只需要重载可能用到的方法 (上例中只有 2 个) 就行了,而不需要再去实现每一个方法。优点显而易见——减少编码量。在 JFrame 上发生的窗口事件 (WindowEvent) 包括:windowActivated(WindowEvent e) 窗口得到焦点时触发 windowClosed(WindowEvent e) 窗口关闭之后触发 windowClosing(WindowEvent e) 窗口关闭时触发 windowDeactivated(WindowEvent e) 窗口失去焦点时触发 windowDeiconified(WindowEvent e)windowIconified(WindowEvent e)windowOpened(WindowEvent e) 窗口打开之后触发上例重载了其中两个方法。如果在上例运行产生的窗口和另外一个应用程序窗口之间来回切换 (在 Windows 操作系统中你可以使用 Alt+Tab 进行切换)……试试看,你发现了什么?有没有现我们的示例窗口标题上的数字一直在增加,这便是在 windowActivated 事件中 setTitle(&Test Frame & + counter++) 的功劳。而另一个事件处理函数 windowClosing 中的 System.exit(0) 则保证了当窗口被关闭时退出当前的 Java 应用程序。如果不作这样的处理会怎样呢?试验之后你会发现,窗口虽然关闭了,但程序并没有结束,但此时,除了使用 Ctrl+C 强行结束之外,恐怕也没有其它办法了。所以,这一点非常重要:你想在关闭窗口的时候退出应用程序,那就需要处理 windowClosing 事件。……也不尽然,其实还有另外一个更简单的办法,让 JFrame 自己处理这件事——你只需要如下调用 JFrame 的 setDefaultCloseOperation 即可:frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);在产生 JFrame 对象之后执行上述语句,就可以不用处理 windowsClosing 事件来退出程序了。我们可以在 JFrame 对象中添加 AWT 或者 Swing 组件。但是,虽然它有 add 方法,却不能直接用于添加组件,否则崤壮鲆斐!??恍啪褪允浴T斐烧飧鱿窒蟮脑?蛑挥幸桓鼋馐停篔Frame 不是一个容器,它只是一个框架。那么,应该怎么添加组件呢?JFrame 有一个 Content Pane,窗口是显示的所有组件都是添加在这个 Content Pane 中。JFrame 提供了两个方法:getContentPane 和 setContentPane 就是用于获取和设置其 Content Pane 的。通常我们不需要重新设置 JFrame 的 Content Pane,只需要直接获取默认的 Content Pane 来添加组件等。如:(new JFrame()).getContentPane().add(new Button(&test button&))。三. 按钮、切换按钮、复选按钮和单选按钮按钮……就是按钮,不会连按钮都不知道吧?切换按钮,有两种状态的按钮,即按下状态和弹起状态,若称为选择状态或未选择状态。复选按钮,又叫复选框,用一个小方框中是否打勾来表示两种状态。单选按钮,又叫收音机按钮,以小圆框打点表示被选中。常成组出现,一组单选按钮中只有一个能被选中。发现什么了吗?——对了,这一部分是在讲各种各样的按钮,而且后三种按钮都有两种状态。先看看这些按钮都长成什么样:上图中,从上到下,依次就是按钮、切换按钮、复选按钮和单选按钮。图示的窗口,就是下面这个例子的运行结果:/* * TestButtons.java * @author Fancy */ import java.awt.event.ActionE import java.awt.event.ActionL import java.awt.event.ItemE import java.awt.event.ItemL import javax.swing.ButtonG import javax.swing.JB import javax.swing.JCheckB import javax.swing.JF import javax.swing.JL import javax.swing.JRadioB import javax.swing.JToggleB public final class TestButtons ... {publicstaticvoid main(String[] args) ...{TestButtons tb =new TestButtons();tb.show();}JFrame frame =new JFrame(&Test Buttons&);JButton jButton =new JButton(&JButton&); // 按钮JToggleButton toggle =new JToggleButton(&Toggle Button&); // 切换按钮JCheckBox checkBox =new JCheckBox(&Check Box&); // 复选按钮JRadioButton radio1 =new JRadioButton(&Radio Button 1&); // 单选按钮JRadioButton radio2 =new JRadioButton(&Radio Button 2&);JRadioButton radio3 =new JRadioButton(&Radio Button 3&);JLabel label =new JLabel(&Here is Status, look here.&); // 不是按钮,是静态文本public TestButtons() ...{frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().setLayout(new java.awt.FlowLayout());// 为一般按钮添加动作监听器jButton.addActionListener(new ActionListener() ...{publicvoid actionPerformed(ActionEvent ae) ...{label.setText(&You clicked jButton&);}});// 为切换按钮添加动作监听器toggle.addActionListener(new ActionListener() ...{publicvoid actionPerformed(ActionEvent ae) ...{JToggleButton toggle = (JToggleButton) ae.getSource();if (toggle.isSelected()) ...{label.setText(&You selected Toggle Button&);}else...{label.setText(&You deselected Toggle Button&);}}});// 为复选按钮添加条目监听器checkBox.addItemListener(new ItemListener() ...{publicvoid itemStateChanged(ItemEvent e) ...{JCheckBox cb = (JCheckBox) e.getSource();label.setText(&Selected Check Box is &+ cb.isSelected());}});// 用一个按钮组对象包容一组单选按钮ButtonGroup group =new ButtonGroup();// 生成一个新的动作监听器对象,备用ActionListener al =new ActionListener() ...{publicvoid actionPerformed(ActionEvent ae) ...{JRadioButton radio = (JRadioButton) ae.getSource();if (radio == radio1) ...{label.setText(&You selected Radio Button 1&);}elseif (radio == radio2) ...{label.setText(&You selected Radio Button 2&);}else...{label.setText(&You selected Radio Button 3&);}}};// 为各单选按钮添加动作监听器radio1.addActionListener(al);radio2.addActionListener(al);radio3.addActionListener(al);// 将单选按钮添加到按钮组中group.add(radio1);group.add(radio2);group.add(radio3);frame.getContentPane().add(jButton);frame.getContentPane().add(toggle);frame.getContentPane().add(checkBox);frame.getContentPane().add(radio1);frame.getContentPane().add(radio2);frame.getContentPane().add(radio3);frame.getContentPane().add(label);frame.setSize(200, 250);}publicvoid show() ...{frame.setVisible(true);} }除一般按钮外,其余三种按钮都有两种状态,即选择 (按下) 状态和未选择 (弹起) 状态。那么我们又该如何判断呢?切换按钮 (JToggleButton) 提供了一个 isSelected() 方法用来判断当前所处的状态,返回值为真 (true) 时表示它处于选择状态,返回值为假 (false) 时表示它处于未选择状态。而复选按钮 (JCheckBox) 和单选按钮 (JRadioButton) 都是从 JToggleButton 继承的,所以也具有 isSelected() 方法。如上例中 if (toggle.isSelected()) { ... } 等。单选按钮由自身的特点决定了它们必须成组出现,而且一组中只能有一个能被选中。因此我们需要用一个专门的类,ButtonGroup 来管理。添加到 ButtonGroup 的多个单选按钮中,如果有一个被选择中,同组中的其它单选按钮都会自动改变其状态为未选择状态。在 推荐:程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构,ButtonGroup 中添加按钮,是使用它的 add 方法,如上例中的 group.add(radio1);。既然我们已经将多个单选按钮添加到一个 ButtonGroup 中了,那么我们是不是可以将一个包含多个单选按钮的 ButtonGroup 对象添加到 JFrame 的 Content Pane 中,以达到添加其中所有单选按钮的目的呢?不行!ButtonGroup 不是一个可显示的组件,它仅用于管理。所以,在往 JFrame 中添加一组 JRadioButton 的时候,需要一个一个的添加 JRadioButton,而不是笼统的添加一个 ButtonGroup。上例中还用到了 JLabel,这不是按钮,而是一个静态文本组件,主要用于显示提示文本。要获得一个 JLabel 对象当前显示的文本内容,可以使用它的 getText() 方法;反之,要改变一个 JLabel 对象显示的文本,要使用它的 setText(String text) 方法,如上例中的 label.setText(&You selected Toggle Button&)。其实这两个方法同样可以用于 JButton 等类。比如上例中我们使用 new JButton(&JButton&) 构造了一个按钮 jButton,如果使用 jButton.getText() 就可以得到字符串 &JButton&。而 jButton.setText(&A Button&),则可以改变按钮上显示的文字为 &A Button&。这两句代码没有在示例中写出来,你可以自己试试。上例中大量使用了动作监听器 (ActionListener)。ActionListener 只监听一个事件,这个事件在其相关组件上产生了动作时被触发,因此叫作动作事件 (ActionEvent)。ActionListener 只有一个方法需要实现,就是 actionPerformed(ActionEvent event)。按钮、切换按钮和单选按钮被单击时都会触发动作事件,引起动作监听器调用 actionPerformed 方法。因此,如果你想在单击按钮之后做什么事,当然应该重载 ActionListener 的 actionPerformed 方法了。各种按钮都提供了 addActionListener 方法以添加动作监听器。复选框就要特殊一些。虽然它也有 addActionListener 方法,意味着可以使用动作监听器,但是使用之后你会发现动作监听器并没有起到预想的作用。为什么?原来,单击一个复选按钮,触发的不是动作事件,而是条目事件 (ItemEvent) 中的状态变化 (itemStateChanged),由条目监听器 (ItemListener) 监听,相应需要重载的方法是 ItemListener 的 itemStateChanged 方法。上例中我们将一个名为 al 的 ActionListener 添加到了每一个单选按钮中,如何判断是哪个单选按钮触发了事件并被 al 监听到了呢?我们可以从 ActionEvent 的 getSource() 方法得到触发事件单选按钮。由于 getSource() 返回的是一个 Object 引用,虽然这个引用指向的是一个单选按钮的实例,但我们还是需要将这个引用的类型转换为 JRadioButton,如上例中的:JRadioButton radio = (JRadioButton) ae.getSource(),只有这样我们才能调用 JRadioButton 有而 Object 没有的方法。同时,还需要说明的一点是,每个单选按钮都可以添加一个单独的 ActionListener 实例,而不一定要添加同一个。同样的道理,若干毫不相干的、需要添加 ActionListener 的若干组件,也可以添加同一个 ActionListener 实例。关键在于编程者对 actionPerformed 方法的重载。比如下面这段代码就为一个 JButton 对象和一个 JRadioButton 对象添加了同一个动作监听器实例:/** * @(#) Test.java * @author James */ import javax.swing. * ; import java.awt.event. * ; public class Test ... {JBJRadioBpublic Test() ...{JFrame f =new JFrame(&Test&);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.getContentPane().setLayout(new java.awt.FlowLayout());b =new JButton(&JButton&);rb =new JRadioButton(&RadioButton&);ActionListener a =new ActionListener() ...{publicvoid actionPerformed(ActionEvent ae) ...{if (ae.getSource() == b) ...{System.out.println(&You clicked the JButton&);}else...{System.out.println(&You clicked the RadioButton&);}}};b.addActionListener(a);rb.addActionListener(a);f.getContentPane().add(b);f.getContentPane().add(rb);f.pack();f.show();}publicstaticvoid main(String[] args) ...{new Test();} }运行程序后,分别单击两个按钮,相应的,在控制台能分别得到如下输出:You clicked the JButtonYou clicked the RadioButton这说明多个不用的组件添加同一个监听器是可行的——不过前提是这些组件都能添加这个监听器。四. 文本输入框、密码输入框文本输入框包括两种,单行文本输入框 (JTextField) 和多行文本输入框 (JTextArea)。密码输入框则只有一种 (JPasswordField)。JPasswordField 是 JTextField 的子类,它们的主要区别是 JPasswordField 不会显示出用户输入的东西,而只会显示出程序员设定的一个固定字符,比如 '*' 或者 '#'。下面的示例图和代码是 JTextField、JPasswordField 和 JTextArea 的示例:/* * TestTexts.java * @author Fancy */ import javax.swing.JF import javax.swing.JL import javax.swing.JPasswordF import javax.swing.JTextA import javax.swing.JTextF import javax.swing.event.CaretE import javax.swing.event.CaretL public final class TestTexts extends JFrame ... {publicstaticvoid main(String[] args) ...{TestTexts tt =new TestTexts();tt.setVisible(true);}private JLabel label =new JLabel(&Status&);private JTextField textFprivate JPasswordField pwdFprivate JTextArea textApublic TestTexts() ...{super(&Test Texts&);setDefaultCloseOperation(EXIT_ON_CLOSE);getContentPane().setLayout(new java.awt.FlowLayout());textField =new JTextField(15);/**//* 监听文本光标移动事件 */textField.addCaretListener(new CaretListener() ...{publicvoid caretUpdate(CaretEvent e) ...{// 如果改变了内容,就可以即时更新 label 显示的内容label.setText(textField.getText());}});pwdField =new JPasswordField(15);pwdField.setEchoChar('#');textArea =new JTextArea(5, 15);textArea.setLineWrap(true);getContentPane().add(textField);getContentPane().add(pwdField);getContentPane().add(textArea);getContentPane().add(label);setSize(200, 200);} }上例中,我们构造了一个宽度为 15 个字符的单行文本框 (textField = new JTextField(15);),并使用 addCaretListener 方法添加了一个 CaretListener (textField.addCaretListener ...)。CaretListener 监听文本光标的移动事件。当用户使用键盘、鼠标等移动了文本光标在 JTextField 中的位置时触发这个事件。我们需要重载 caretUpdate(CaretEvent e) 对事件进行处理 (public void caretUpdate(CaretEvent e) ...)。这样,我们可以在这里做类似 VB 中 TextBox 的 OnChange 事件中做的事情。JTextField 有 5 个构造方法,常用其中的四个:JTextField()JTextField(int columns),如上例 textField = new JTextField(15);JTextField(String text)JTextField(String text, int columns)其中,参数 text 是单行文本框的初始内容,而 columns 指定了单行文本框的宽度,以字符为单位。JTextField 中的文本内容可以用 getText() 方法获得。也可以用 setText 方法指定 JTextField 中的文本内容。JPasswordField 是 JTextField 的子类,其构造方法也是类似的。JPasswordField 提供了 setEchoChar(char ch) 方法设置为了隐藏密码而显示的字符,默认为 '*' 字符,上例中则设置为了 '#' 字符 (pwdField.setEchoChar('#');)。与 JTextField 一样,JPasswordField 也用 getText 方法和 setText 获得或者设置文本内容 (当然在用户界面上是隐藏的)。JTextField 是单行文本框,不能显示多行文本,如果想要显示多行文本,就只好使用多行文本框 JTextArea 了。JTextArea 有六个构造方法,常用的也是四个:JTextArea()JTextArea(int rows, int columns)JTextArea(String text)JTextArea(String text, int rows, int columns)text 为 JTextArea 的初始化文本内容;rows 为 JTextArea 的高度,以行为单位;columns 为 JTextArea 的宽度,以字符为单位。如上例中就构造了一个高 5 行,宽 15 个字符的多行文本框 (textArea = new JTextArea(5, 15);)。多行文本框默认是不会自动折行的 (不过可以输入回车符换行),我们可以使用 JTextArea 的 setLineWrap 方法设置是否允许自动折行。setLineWrap(true) 是允许自动折行,setLineWrap(false) 则是不允许自动折行。多行文本框会根据用户输入的内容自动扩展大小,不信,自己做个实验——如果不自动折行,那么多行文本框的宽度由最长的一行文字确定的;如果行数据超过了预设的行数,则多行文本框会扩展自身的高度去适应。换句话说,多行文本框不会自动产生滚动条。怎么办?后面讲到滚动窗格 (JScrollPane) 的时候,你就知道了。多行文本框里文本内容的获得和设置,同样可以使用 getText 和 setText 两个方法来完成。五. 窗格、滚动窗格和布局管理窗格 (JPanel) 和滚动窗格 (JScrollPane) 在图形用户界面设计中大量用于各种组件在窗口上的布置和安排。这里所谓的布置和安排,就是布局 (Layout),因此不得不先说说布局。将加入到容器(通常为窗口等) 的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。布局由布局管理器 (Layout Manager) 来管理。那么,我们在什么时候应该使用布局管理器?应用选择哪种布局管理器?又该怎样使用布局管理器呢?往往,我们设计一个窗口,其中是要添加若干组件的。为了管理好这些管理的布局,我们就要使用布局管理器。比如说,设计一个简单的编辑器,这个编辑器中只需要放置两个按钮和一个多行文本框。这些组件是让 Java 自己任意安排呢?还是按照一定的位置关系较规范的安排呢?当然应该选择后者。那么,为了按照一定的位置关系安排这些组件,我们就需要用到布局管理器了。然后我们遇到了一个选择题——使用哪种布局管理器。为此,我们首先要知道有些什么布局管理器,它们的布局特点是什么。常用的布局管理器有: FlowLayout、BorderLayout、GridLayout、BoxLayout 等,其中 FlowLayout 和 BorderLayout 最常用,本文主要也就只谈谈这两种布局管理器。下面列表说明它们的布局特点:布局管理器 布局特点FlowLayout 将组件按从左到右从上到下的顺序依次排列,一行不能放完则折到下一行继续放置 BorderLayout 将组件按东(右)、南(下)、西(左)、北(上)、中五个区域放置,每个方向最多只能放置一个组件(或容器)。 GridLayout 形似一个无框线的表格,每个单元格中放一个组件 BoxLayout 就像整齐放置的一行或者一列盒子,每个盒子中一个组件就上述的编辑器为例,如果选用 FlowLayout,那么两个按钮和一个多行文本框就会排列在一行——当然这是窗口足够宽的情况;如果窗口稍窄一些,则可能分两行排列,第一行有两个按钮,而第二行是多行文本框——这是最理想的情况;如果窗口再窄一些,就可能分三行排列,第一行和第二行分别放置一个按钮,第三行放置多行文本框。因此,如果窗口大小可以改变,那么三个组件的位置关系也可能随着窗口大小的变化而变化。其实上面所举的例程中,大部分都是用的 FlowLayout,那是因为我们没有要求组件的布局。如果选用 BorderLayout 的情况又如何呢?我们可以试着加入一个窗格 (JPanel,稍后讲解),并将两个按钮放置在其中,然后将这个窗格加入到 BorderLayout 的北部 (即上部);再将多行文本框加入到 BorderLayout 中部。结果类似使用 FlowLayout 的第二种可能,是最理想的情况。而且,如果改变窗口大小,它们的位置关系仍然是北-中的关系,不会随之改变。剩下的两种布局管理器,加以窗格 (JPanel) 的配合,也能够很好的安排上述编辑器所需的三个组件。但是由于它们的使用稍为复杂一些,所以就不讲了。下面就讲讲如何使用 FlowLayout 和 BorderLayout。任何布局管理器,都需要用在容器上,比如 JFrame 的 Content Pane 和下面要说的 JPanel 都是容器(JFrame 默认的 Content Pane 实际就是一个 JPanel)。容器组件提供了一个 setLayout 方法,就是用来改变其布局管理器的。默认情况下,JFrame 的 Content Pane 使用的是 BorderLayout,而一个新产生的 JPanel 对象使用的是 FlowLayout。但不管怎样,我们都可以调用它们的 setLayout 方法来改变其布局管理器。比如上述的编辑器中,我们要让窗口 (JFrame 对象,假设为 frame) 使用 BorderLayout,就可以使用 frame.getContentPane().setLayout(new BorderLayout()); 来改变其布局管理器为一个新的 BorderLayout 对象。然后,我们对布局管理器的直接操作就结束了,剩下的只需要往容器里添加组件。如果使用 FlowLayout,我们只需要使用容器的 add(Component c) 方法添加组件就行了。但是,如果使用 BorderLayout 就不一样了,因为要指定是把组件添加到哪个区域啊。那我们就使用容器的 add(Component c, Object o) 方法添加组件,该方法的第二个参数就是指明添加到的区域用的。例如,上述编辑器中要添加一个多行文本框到 BorderLayout 的中部,就可以用 frame.getContentPane().add(new JTextArea(5, 15), BorderLayout.CENTER) 来实现。BorderLayout 的五个区域分别是用下列五个常量来描述的:BorderLayout.EAST 东(右) BorderLayout.SOUTH 南(下) BorderLayout.WEST 西(左) BorderLayout.NORTH 北(上) BorderLayout.CENTER 中刚才已经提到了使用 JPanel。JPanel 作为一个容器,可以包容一些组件,然后将这个 JPanel 对象作为一个组件添加到另一个容器 (称作父容器) 中。这个功能有什么好处呢?上面不是提到 BorderLayout 的一个区域中只能添加一个组件吗?但是我们的编辑器需要添加两个按钮到它的北部,怎么办?下面的例子中,我们就会用的一个 JPanel 包容了这两个按钮,然后再将这个 JPanel 对象作为一个组件添加到设置布局管理器为 BorderLayout 的 Content Pane 中。上面说到各布局管理器的布局特点的时候,几乎每一种都是一个区域只能添加一个组件,那我们想添加多个组件到一个区域的时候,就要用到 JPanel 了。如果还没有明白,稍后看一段程序可能更易于理解。而滚动窗格 (JScrollPane) 呢?它是一个能够自己产生滚动条的容器,通常只包容一个组件,并且根据这个组件的大小自动产生滚动条。比如上面讲 JTextArea 的时候提到:JTextAera 会随用户输入的内容自动扩展大小,很容易打破各组件的布局。但是,如果我们将它包容在一个滚动窗格中,它的扩展就不会直接反映在大小的变化上,而会反映在滚动窗格的滚动条上,也就不会打破各组件的布局了。稍后的例子会让你清清楚楚。是不是等着看例子了?好,例子来了:/* * TestPanels.java * @author Fancy */ import java.awt.BorderL import javax.swing.JB import javax.swing.JF import javax.swing.JP import javax.swing.JScrollP import javax.swing.JTextA public final class TestPanels extends JFrame ... {publicstaticvoid main(String[] args) ...{TestPanels tp =new TestPanels();tp.setVisible(true);}public TestPanels() ...{setDefaultCloseOperation(EXIT_ON_CLOSE);JPanel panel =new JPanel();for (int i =0; i &2; i++) ...{panel.add(new JButton(&Button 00&+ i));}JTextArea textArea =new JTextArea(5, 15);textArea.setLineWrap(true);JScrollPane scrollPane =new JScrollPane(textArea);getContentPane().add(panel, BorderLayout.NORTH);getContentPane().add(scrollPane, BorderLayout.CENTER);pack();} }这个例子的运行结果如下图,正是我们想要的结果——上面两个按钮,下面是一个可以滚动的多行文本框:上例中首先产生了一个 JPanel 对象 (JPanel panel = new JPanel();),然后将两个按钮置于其中 (panel.add ...);然后产生了一个多行文本框 (JTextArea textArea = new JTextArea(5, 15);),并使用一个滚动窗格将它包裹起来 (JScrollPane scrollPane = new JScrollPane(textArea);),使之成为可以滚动的多行文本框。最后将两个容器 (JPanel 对象和 JScrollPane 对象) 分别添加到了窗口的北部 (getContentPane().add(panel, BorderLayout.NORTH);) 和中部 (也就是剩余部分,getContentPane().add(scrollPane, BorderLayout.CENTER);)。好像有点不对劲,是什么呢?对了,我们没有设置 Content Pane 的布局管理器为 BorderLayout 啊,为什么……刚才不是说了吗,JFrame 的 Content Pane 的默认布局管理器就是 BorderLayout,所以不用再设置了。好了,《简述 Java 图形用户界面设计》就告一段落了。由于篇幅有限,这里说的都是初级知识,有此基础,设计复杂一点的图形用户界面也就不是难事了!本文引自:http://blog.csdn.net/jamesfancy/article/details/1196585 swing图形页面设计:http://www.bccn.net/Article/kfyy/java/jc/Index.html awt图形用户设计:http://www.bccn.net/Article/kfyy/java/jc/Index.html
推荐:介绍一下QQ登入界面的设计: 内容: 1.背景图片的设置 2.JFrame窗体大小,去掉window装饰的设置 3.JFrame窗体去掉自带的window修饰后(窗体不能拖动),拖动监听
作为一个 Java 程序员,从论坛上感受到使用 Java 开发程序的人越来多,心中不免欣慰。但是,同样是从论坛中,看到多数人提到 Java 就以为是网络开发——不是这样的,Java 也可以开发应用程序,
相关阅读排行
相关内容推荐
请激活账号
为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。
您的注册邮箱:
如果您没有收到激活邮件,请注意检查垃圾箱。}

我要回帖

更多关于 java swing可视化插件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信