文档章节

转一篇很不错的介绍NetBeans的文章

穿越星辰
 穿越星辰
发布于 2010/05/13 21:11
字数 2050
阅读 437
收藏 0

NetBeans 6.0 提高生产力之Swing Application Framework (JSR 296)

一篇博客介绍了NetBeans Java代码编辑器,这一篇将介绍用NetBeans 开发基于Swing Application Framework (JSR 296) 的程序,Swing一直以来是饱受争议的GUI库,特别是SWT与Swing的争论,分别体现在了Eclipse与NetBeans的争论上。

在此,我无心讨论SWT与Swing孰优孰劣,你要是真的对这个感兴趣,可以到williamchen博客里的Swing专栏看看,该专栏博主已经对SWT和Swing分析得非常透彻:

http://blog.sina.com.cn/swingjava

Swing在1998 年末作为Java 2的一部分发布了1.0,但是当时发布的版本不管是性能还是外观都足以令人失望。虽然当时Swing小组的工程师使用了最前沿的技术,如设计模式,但是时 的Swing小组已经被性能、本地化外观一致性问题以及许多错误深深陷住了,这些问题几乎把整个项目拖垮。

幸亏,Swing小组坚持了下来,要不然今天我们就不会看到像NetBeans这样的IDE了。自从JDK1.5后,Java的性能已经有了巨大的改观,现在1.6下,Swing的性能已经完全不是问题。

那么Swing的优势有那些呢?

l         优秀的设计,正如刚才所说的,Swing从九十年代中期开始设计就用了当时最前沿的开发方法学。可以说Swing在当今各种GUI库中,设计是非常优雅的。

l         轻量级

l         官方的存在JRE中,发布程序不需要像SWT那样还要捆绑自己的GUI库

l         真正的平台独立,Swing组件由Java 2D绘制

l         轻易的更改面观模式

l         强大的IDE支持,现在用NetBeans做界面,几乎不用你敲一行代码。

l         Swing现在又多了一个杀手级框架Swing Application Framework (JSR 296)

下面开始我的第二篇Java博客

NetBeans 6.0 提高生产力之Swing Application Framework (JSR 296)

Swing Application Framework简介

Swing Application Framework(以下简称SAF)致力于简化Swing应用程序的开发,框架定义了对大多数桌面应用程序的共有的基础设施:

l         应用程序生命周期管理,特别是GUI的启动和关闭。

l         对资源管理和载入的支持,这些资源是字符串,格式化的消息,图像,颜色,字体以及桌面应用程序共有的其他类型的资源。

l         对动作定义,管理和绑定的支持,其中包含了异步运行的动作(在后台运行)。

l         持久化会话状态:支持自动地,有选择地保存应用程序一次运行到下次运行的GUI状态。比如顶层的窗口几何位置。


用NetBeans开发SAF

SAF已经定义了大多数桌面应用程序的基础设施,我们可以更方便的开发Swing程序了,但是手动编码开发GUI还是让很多人抓狂。能不能提供一个像VB一样的环境,让程序员更加专注于功能的实现而不是界面的实现?答案是肯定的,NetBeans 6.0就为开发SAF提供了这样一个环境,甚至比VB还要做得更好。

那么到底NetBeans6.0SAF提供了什么样的优势呢?

l         生成基础框架,不必每次新创建一个程序的时候都从头开始

l         唾手可得的国际化支持,在Netbeans里对SAF程序国际化,简单得不能再简单

l         拥有Swing世界里的明星级UI设计工具模块Matisse提供的免费大餐

l         NetBeans开发SAF,意味着你还可以使用Beans BindingJSR 295),数据绑定将问题变得更简单



开始之前

用NetBeans 6.0开发基于SAF,其实不用明白SAF,主要遵循一定的开发原则也可以开发出稳定高效的SAF程序来

但是为了你更深入的理解SAF,强烈建议看下面的文章

l         Using the Swing Application Framework (JSR 296)

http://java.sun.com/developer/technicalArticles/javase/swingappfr/

l         Swing应用程序框架(Swing Application Framework)API绪论(JSR-296)之一

http://www.javaeye.com/topic/81326

Swing应用程序框架(Swing Application Framework)API绪论(JSR-296)之二

http://www.javaeye.com/topic/81327

l
  
 
如果你有更多的时间,那么请看下面网址有关Swing的部分

http://blog.sina.com.cn/swingjava



开发环境准备

JDK1.6或以上版本

NetBeans6.0或以上版本

提示:Netbeans 网站上提供有六种捆绑包下载

l         Web & Java EE

l         Mobility

l         Java SE

l         Ruby

l         C/C++

l         All

开发Swing Application Framework只需要Java SE下载包就行了

这样能真正发挥NetBeans的性能!



创建项目

我们新建一个项目,从Java种类里选择 Java Desktop Application,如下图

点击下一步,接着输入项目名称、项目存放地址和程序的主类

在Choose Application Shell里面我们选择Basic Application,单击完成

提示:我们如果创建基于Swing的数据库程序,那么选择BataBase Application将提供极大的便利。但是在这里我只是介绍Basic Application,也就是现在我们用SAF开发普通的桌面程序。



生成的项目目录结构

l         META-INF/services目录

该目录一般存在一个JAR包里面

META-INF/services目录涉及一个模式:服务提供者模式

引入该模式一般是为了程序松散耦合,而且是IoC(控制反转)的另一种实现方式

服务提供者模式一般有两个角色

²        服务 :一般为一个抽象类

²        服务提供者 :抽象类的实现

存在META-INF/services目录的JAR包一般为一个“服务提供者”

用NetBeans开发中小型程序不需要服务提供者概念,如果你要深入理解

可以Baidu或Google一下META-INF/services

l         foo

foo包是我们创建程序的主类foo.FooApp时,NetBeans自动为我们生成的,

我们来看看NetBeans为我们生成了什么基础框架类:

1、FooApp.java

public   class  FooApp  extends  SingleFrameApplication  {

    

/**

     * 在启动的时候创建和显示程序的主框架

     
*/


    @Override 
protected void startup() {

        show(
new FooView(this));

    }


    
/**

     *这个方法是用相应的资源注入到特定的Window来初始化程序

     *因为我们用NetBeansk开发,所以相应的资源是通过Gui生成器来完成

     *也就是不用我们手动编写代码

     *所以这个方法不是必须的

     
*/


    @Override 
protected void configureWindow(java.awt.Window root) {

    }


    
/**

     * 一个方便的静态获取器,用来获取FooApp类的实例

     
*/


    
public static FooApp getApplication() {

        
return Application.getInstance(FooApp.class);

    }


    
/**

     * 程序的运行入口点

     
*/


    
public static void main(String[] args) {

        launch(FooApp.
class, args);

    }


}

FooApp.java里面的代码是NetBean为我们生成的,开发简单的程序这里基本上不需要更改什么。


2
、FooAboutBox.java

每个程序都应该有一个关于界面,Netbeans为我们生成了关于的模板

修改相应文字就可以了,当然也可以自己做个About界面


3
、FooView.java

FooView.java是程序View部分的关键,由于生成的代码比较多

在解释代码之前,我先看看Design部分

NetBenas给我们生成的框架非常简单明了

需要注意的是图上标识的两个地方

 标有1的地区为消息地区,我们的程序完成任务后,在这里提示消息

 标有2的地区为任务进度条,程序执行任务时在这里现实任务进度,当然任务有确定模式和不确定模式,不确定模式的进度条持续地显示动画来表示正进行的操作。

接下来我们看看FooView.java的构造器的代码:

     public  FooView(SingleFrameApplication app)  {

        
super(app);

        initComponents();

        ResourceMap resourceMap 
= getResourceMap();

        
int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");

        messageTimer 
= new Timer(messageTimeout, new ActionListener() {

            
public void actionPerformed(ActionEvent e) {

                statusMessageLabel.setText(
"");

            }


        }
);

        messageTimer.setRepeats(
false);

        
int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");

        
for (int i = 0; i < busyIcons.length; i++{

            busyIcons[i] 
= resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");

        }


        busyIconTimer 
= new Timer(busyAnimationRate, new ActionListener() {

            
public void actionPerformed(ActionEvent e) {

                busyIconIndex 
= (busyIconIndex + 1% busyIcons.length;

                statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);

            }


        }
);

        idleIcon 
= resourceMap.getIcon("StatusBar.idleIcon");

        statusAnimationLabel.setIcon(idleIcon);

        progressBar.setVisible(
false);

        
// connecting action tasks to status bar via TaskMonitor

        TaskMonitor taskMonitor 
= new TaskMonitor(getApplication().getContext());

        taskMonitor.addPropertyChangeListener(

                
new java.beans.PropertyChangeListener() {

            
public void propertyChange(java.beans.PropertyChangeEvent evt) {

                String propertyName 
= evt.getPropertyName();

本文转载自:http://www.jocoso.cn/lazygoo/diary/20316

上一篇: 名词解释
穿越星辰
粉丝 34
博文 162
码字总数 17996
作品 0
朝阳
技术主管
私信 提问
[转] netbeans 使用心得

Eclipse用户总是在NetBeans炫耀Eclipse是多么的漂亮,尤其会 说NetBeans的字体丑陋,NetBeans的字体太小,编辑器里的字体不好看,字体边楞有锯齿等等。坦白的说,这也是我刚从Eclipse转到 Ne...

dodojava
2011/06/08
0
1
如何在Netbeans中开发Android程序

Google Android项目的用IDE开发时通常是Eclipse + Android SDK + Android plugin for Eclipse. Eclipse因为有IBM撑腰, 前几年一直是Java IDE的首选..不过现在Sun公司经过多年的摸黑和偷窥(.....

红薯
2009/06/29
16.8K
6
NetBeans远程调试Linux c++ 11项目

NetBeans远程调试Linux c++ 11项目 由于好多原因,好久没有写博客了,随着c++ 11的普及率越来越高,开发c++ 项目的人也越来越多,可以说c++ 11 给了c++ 这门语言第二次生命,而且据笔者了解,...

SolidMango
2018/08/15
0
0
最好的 Grails/Groovy 的集成开发环境 —— NetBeans、Spring 还是 IntelliJ 呢?

开发者或程序员不依赖任何工具解决编程问题的时代一去不复返了.现在是一个高度竞争的软件应用开发世界,对开发者来说仅仅花费几小时写出正确的代码,可能算不上是一个可行的解决方案. 这就是I...

oschina
2013/09/12
7.8K
27
在NetBeans下根据xml schema创建java类

在我的上篇文章"在NetBeans下将Java对象映射到XML文档",利用NetBeans模板代码将Person对象的数据序列化到一个xml文档中(后面称之为instant document)。本篇介绍如何使用NetBeans6.7.1从一个...

长平狐
2012/08/28
170
0

没有更多内容

加载失败,请刷新页面

加载更多

《精进》的读后感作文2600字

《精进》的读后感作文2600字: 首先,我想先分享我读这本书的过程,我是一名大一的学生,在我高考完的暑假,有一次一位知乎用户的朋友推荐了这本书。当时我看了这本书的封面,有一句话非常的...

原创小博客
12分钟前
0
0
亿万pv的混合云规划实施

基础服务: keepalive,lvs,nginx,dns,ntp,redis集群,yum仓库,web资源 网络高可用 防火墙冗余,交换机堆叠 专线互联 物理机虚拟化 VMware vcenter/ Proxmox...

以谁为师
33分钟前
0
0
聊聊dubbo的LRUCache

序 本文主要研究一下dubbo的LRUCache LRUCache dubbo-2.7.2/dubbo-common/src/main/java/org/apache/dubbo/common/utils/LRUCache.java public class LRUCache<K, V> extends LinkedHashMap<......

go4it
35分钟前
0
0
前端知识点总结——H5

前端知识点总结——H5 1.html5新特性 (1)新的语义标签 (2)增强型表单* (3)音频和视频 (4)Canvas绘图 (5)SVG绘图 (6)地理定位 (7)拖动API (8)Web Worker (9)Web Storage (10)Web Socket 2.增强...

智云编程
38分钟前
0
0
微服务之架构技术选型与设计

本文主要介绍了架构技术选型与设计-微服务选型,Spring cloud 实现采用的技术,希望对您的学习有所帮助。 架构技术选型与设计-DUBBODubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿...

别打我会飞
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部