<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Ryan's Java world!

    something about Java and opensource!

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

    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 冰雨 閱讀(2051) 評論(0)  編輯  收藏 所屬分類: Java

    JSF中文技術文摘
    主站蜘蛛池模板: 亚洲一区二区精品视频| 特级毛片aaaa免费观看| 久久精品国产亚洲av麻豆| 中文字幕免费在线看线人| 亚洲av综合av一区二区三区 | 激情小说亚洲图片| 亚洲va久久久噜噜噜久久男同 | 国产亚洲一区二区在线观看| 91嫩草国产在线观看免费| 国产精品成人亚洲| 亚洲日韩乱码中文无码蜜桃臀| 免费一级成人毛片| 91成人免费在线视频| 中国在线观看免费的www| 亚洲一区二区三区高清在线观看| 激情97综合亚洲色婷婷五| 100部毛片免费全部播放完整| 成人福利在线观看免费视频| 亚洲精品天堂在线观看| 亚洲国产精品无码成人片久久| 日韩午夜免费视频| 日韩中文无码有码免费视频| 精品一区二区三区无码免费视频 | 国产精品免费观看调教网| 一个人免费观看视频在线中文 | 亚洲精品美女视频| 亚洲狠狠久久综合一区77777| 久久激情亚洲精品无码?V| 亚洲人AV永久一区二区三区久久| 国产一区二区三区免费视频| 在线观看视频免费国语| 一个人在线观看视频免费| **俄罗斯毛片免费| 免费黄色福利视频| 青娱乐免费在线视频| 毛色毛片免费观看| 成人午夜视频免费| 国产精品国产免费无码专区不卡 | 久久91亚洲人成电影网站| 亚洲av无码一区二区三区不卡| 亚洲视频一区二区|