Ryan's Java world!

          something about Java and opensource!

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            51 Posts :: 25 Stories :: 59 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(3)

          我參與的團隊

          隨筆分類(40)

          隨筆檔案(51)

          文章分類(18)

          文章檔案(25)

          相冊

          收藏夾(9)

          Java技術

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          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?

          posted on 2006-06-04 22:33 冰雨 閱讀(2056) 評論(0)  編輯  收藏 所屬分類: Java

          JSF中文技術文摘
          主站蜘蛛池模板: 宾阳县| 金寨县| 休宁县| 永济市| 阿拉善左旗| 老河口市| 长汀县| 兴义市| 吉木乃县| 乌审旗| 铁力市| 获嘉县| 会东县| 阿图什市| 印江| 昌乐县| 泰宁县| 阳高县| 吉林省| 大安市| 搜索| 吴堡县| 临湘市| 上虞市| 迁西县| 湾仔区| 成都市| 蓬莱市| 云林县| 卓尼县| 溆浦县| 娱乐| 平远县| 高邮市| 化隆| 仙居县| 八宿县| 鄂伦春自治旗| 固原市| 江都市| 双牌县|