`
icess
  • 浏览: 248121 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Breezy简介 -- 快速开发Swing程序!

阅读更多

Breezy简介 -- 快速开发Swing程序!


Breezy:
sf 项目主页: http://sourceforge.net/projects/breezy/

下载: http://sourceforge.net/project/showfiles.php?group_id=158540&package_id=177653&release_id=412125

用户讨论区: http://www.hexiao.cn/bbs/thread.php?fid=9

大家都知道开发Swing程序有三大难点:
布局设置,事件处理,和数据绑定. 使用netbean中的新的布局管理器已经解决了第一个问题, 那么后面两个呢?

Breezy 就是用来简化后面两个问题而推出的.
下面我们先来看看一个简单的例子:

package test;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;

import javax.swing.JButton;
import javax.swing.JFrame;

import net.sf.breezy.event.EventInstaller;
import net.sf.breezy.event.annotations.ActionPerformed;
import net.sf.breezy.event.annotations.DefAction;

@SuppressWarnings("serial")
public class TestBreezy extends JFrame {
     
     private JButton button = new JButton("Test Breezy!");
     
     public TestBreezy() {
           this.setLayout(new BorderLayout());
           this.add(button,BorderLayout.CENTER);
           
           // 用来处理所有的Breezy的Annotations
                    EventInstaller.processEventAnnotation(this);
           
           this.setSize(400, 300);
           this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           
           EventInstaller.setAction(button, "action");
     }
     
  // button的事件响应方法
     @ActionPerformed("button")
     public void myButtonAction() {
          System.out.println("God, this is terrific!");//设置另外一个事件
     }
     
// 使用id注册另外一个事件响应方法
     @DefAction(id="action", name="Button")
     void action(ActionEvent e) {
           System.out.println(e + ":" + e);
     }

     /**
      * @param args
      */
     public static void main(String[] args) {
           // TODO Auto-generated method stub
           JFrame frame = new TestBreezy();
           frame.setVisible(true);
     }

}

怎么样, 看起来不错吧.

现在Breezy几乎支持所有的Swing EventListeners. 详细情况请查看类net.sf.breezy.event.annotations.*

当然了, 作为一个优秀的框架,还要有可扩展性,在Breezy中开发者还可以自定义自己的事件响应Annotation 来实现自己的功能. 详细情况请查看API.

数据绑定问题主要 就是 JTable 和JTree的问题:
使用Breezy来处理该问题,有点类似于Hibernate中的xml映射数据库属性字段差不多. 可以很方便的映射.
请看下面的例子: 和Breezy文档:

package test;

import java.util.Date;

public class Name {
     private String name = "Starwhisperer";

     private Date time = new Date();

     public String getName() {
           return name;
     }

     public void setName(String name) {
           this.name = name;
     }

     public Date getTime() {
           return time;
     }

     public void setTime(Date time) {
           this.time = time;
     }

}


User.java
package test;

import java.util.Date;

import net.sf.breezy.datatable.TableField;

public class User {
     @TableField(head = "名称", editable = false)
     private String name;

     @TableField(head = "年龄", editable = false, type = "number")
     private int age;

     @TableField(head = "阵营", type = "boolean", editable = false)
     private boolean light;

     @TableField(head = "时间", type = "time", pattern = "yyyy/MM/dd")
     private Date date = new Date();

     @TableField(head = "名称", property = "name", type="string")
     private Name nameBean = new Name();

     public Name getNameBean() {
           return nameBean;
     }

     public void setNameBean(Name nameBean) {
           this.nameBean = nameBean;
     }

     public boolean isLight() {
           return light;
     }

     public void setLight(boolean light) {
           this.light = light;
     }

     public int getAge() {
           return age;
     }

     public void setAge(int age) {
           this.age = age;
     }

     public String getName() {
           return name;
     }

     public void setName(String name) {
           this.name = name;
     }

     public Date getDate() {
           return date;
     }

     public void setDate(Date date) {
           this.date = date;
     }

}

DataTableTest .java

package test;

import java.awt.BorderLayout;
import java.util.LinkedList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JScrollPane;

import net.sf.breezy.datatable.DataTable;
import net.sf.breezy.datatable.DataTableScrollPane;


public class DataTableTest {
     private JFrame mainFrm = new JFrame();
     
     protected void setUp() {            
           mainFrm.setSize(100, 600);
           mainFrm.setLocationRelativeTo(null);
           mainFrm.setLayout(new BorderLayout());

           mainFrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     }
     
     public static void main(String[] args) {
           DataTableTest test = new DataTableTest();

           test.setUp();
           test.testTable();
     }
     
     public void testTable() {            
           java.util.List list = new LinkedList();
           for(int i = 0; i < 120; i ++) {
                 User u = new User();
                 
                 u.setAge(33);
                 u.setName("Cain " + i);
                 list.add(u);
           }
           DataTableScrollPane<User> pane = DataTable.getEntityTablePane(list, User.class);
           
           mainFrm.add(pane, BorderLayout.CENTER);            
           mainFrm.setVisible(true);
     }
}


映射文件:datatable-mappings.xml
<?xml version="1.0"?>

<class-mapping>
     <class name="test.User">
           <property name="age" head="年龄" />
           <property name="light" head="光芒" type="boolean" editable="true"/>
           <property name="nameBean" property="time" head="姓名" pattern="yyyy/mm/dd" type="time"/>
           <property name="date" head="Date"/>
           <property name="name" head="Name"/>
     </class>
</class-mapping>

也是很简单的吧. 关于JTree的应用也是很简单的哦. 详细情况请查看用户文档:


更多信息请关注 用户交流论坛: http://www.hexiao.cn/bbs/thread.php?fid=9 

分享到:
评论

相关推荐

    breezy-pdf-lite-php:Phree客户端,用于breezy-pdf-lite,这是一种HTML->由Google Chrome提供支持的PDF服务

    breezy-pdf-lite-php PHP客户端,这是由Google Chrome提供支持 &gt; PDF服务。 依存关系 BreezyPDF Lite:HTML到PDF的生成即服务 安装 composer require jitendra/breezy-pdf-lite-php 用法与范例 use BreezyPdfLite ...

    breezy-pdf-lite:通过Chrome将HTMLCSSJS输入,PDF输出

    一键部署,然后开始从Web应用程序或命令行生成PDF。 入门 1.提交要转换HTML 这是通过Web服务器上的POST请求完成的。 在本示例中,我们将使用一些示例HTML。 curl -X POST -H ' Authorization: Bearer PRIVATE_...

    Breezy-开源

    Breezy是旨在简化Swing上Java GUI应用程序开发的框架。 通过Breezy中的内置和自定义注释,开发人员可以以最少的精力进行事件处理,数据绑定和数据验证。

    breezy_pdf_lite-ruby:用于breezy-pdf-lite的Ruby中间件客户端,这是一种HTML->由Google Chrome提供支持的PDF服务

    安装将此行添加到您的应用程序的Gemfile中: gem 'breezy_pdf_lite' 然后执行: $ bundle或将其自己安装为: $ gem install breezy_pdf_lite用法BreezyPDFLite需要进行一些配置才能使用。 在应用程序中的某个位置...

    breezy-debian:Breezy存储库的镜像,位于https

    这些在Debian中可用(尽管可能不是builddeb开发版本所需的版本)。 它还需要安装dpkg-dev软件包(对于dpkg-mergechangelogs工具): apt-get install dpkg-dev 该插件可以通过两种方式安装。因为您可能正在使用...

    rust-breezy-timer:微风计时器的存储库,这是您可以使用的最简单的计时器,无需担心性能

    微风计时器 :timer_clock: Breezy计时器的目标是成为一个非常简单的计时库,可以将其放入生产代码中而不会改变最终性能。 请参阅“以获取更多信息。目的简单易用直接在生产代码中使用, 释放时无需修改代码,只需...

    Breezy HR for Chrome-crx插件

    Breezy for Chrome提供了一种快速,简单的方法,可将来自Xing,Indeed Resumes,AngelList,Dribbble和Github的候选人吸引到您在Breezy上的职位。 这很简单。 只需浏览到受支持的服务上的用户个人资料,单击右上方的...

    对铬的人力资源「Breezy HR for Chrome」-crx插件

    Breezy for Chrome提供了一种快速,简单的方法,可从LinkedIn,Xing,Indeed Resumes,AngelList,Dribbble和Github寻求候选人到Breezy的职位。这很简单。只需浏览到受支持的服务上的用户个人资料,单击右上方的...

    BreezyAnalytics:升级您的招聘分析功能!

    如果您公司的招聘部门使用作为应用程序跟踪系统,则此应用程序可能会增强您的招聘分析功能。 这个应用程式可让您: 将所有候选数据存储在SQL数据库中,并根据需要完全匿名。 提供有关您当前的职位空缺,候选人以及...

    Breezy:在tvOS上对AirDrop进行越狱实施和研究

    利用和文档类型,使用户能够辨别哪个应用程序(如果有多个)将打开/导入文件。 在下面,您将找到有关如何编辑Info.plist文件以将AirDrop接收器支持添加到您的应用程序的一些资源。 还需要处理打开文件的URL(与...

    BreezyRecruitmentAnalytics

    如果您公司的招聘部门使用作为应用程序跟踪系统,则此应用程序可能会增强您的招聘分析功能。 这个应用程式可让您: 将所有候选数据存储在SQL数据库中,并根据需要完全匿名。 提供有关您当前的职位空缺,候选人...

    debian-janitor:运行Debian Janitor的代码

    设计管理员由多个组件组成:每天运行的几个cron作业: package_metadata同步器从UDD导入软件包元数据候选同步器确定候选者调度程序根据lintian,vcswatch和上游数据确定准备处理哪些程序包,并将它们排队。...

    轻而易举:Classic Rails,React和Redux的高效库

    Breezy是用于Rails,React和Redux的数据和导航库,可帮助开发人员在不使用API或客户端路由的情况下构建具有丰富数据支持的应用程序。 最重要的是,它补充了经典的Rails。 您在经典Rails中工作时喜欢的功能; 表单...

    A Guide to Complex Variables (Steven G. Krantz 2007).pdf

    This is meant to be a breezy book that you could read at one or two sittings, just to get the sense of what this subject is about and how it fits together. In that wise it is quite different from a ...

    静态区、堆、栈 区别

    2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)—,全局变量和静态变量的存储...

    Interview Schedule-crx插件

    *整合您的日历和ats*指定面板采访者,持续时间,开始时间等等*保存和重用面板*轻松处理相互冲突的会议*立即搜索多个候选可用性窗口申请人跟踪系统支持:* avature.*竹子* Breezy.* clearcompany.*谷歌雇用*温室* IBM...

    An Illustrated Introduction to Topology and Homotopy, Kalajdzievski, 2015.pdf

    On the other hand, neither could the content be described as too breezy, for we include most of the important theorems of the basic theory. The material covered in this book is on the fuzzy boundary ...

    Understanding_Ipv6

    This is not intended to be a breezy marketing overview of IPv6 and how it "provides integrated and interoperable technologies to enable exciting new scenarios for personal and enterprise computing.

    understanding IPv6

    This is not intended to be a breezy marketing overview of IPv6 and how it "provides integrated and interoperable technologies to enable exciting new scenarios for personal and enterprise computing." ...

Global site tag (gtag.js) - Google Analytics