欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Breezy简介 -- 快速开发Swing程序! 博客分类: BlogJava Swing.netPHPBBSHibernate 

程序员文章站 2024-02-21 19:15:28
...

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