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 

你可能感兴趣的:(Hibernate,.net,PHP,swing,bbs)