<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中文技術文摘
    主站蜘蛛池模板: 亚洲国产日韩成人综合天堂| 免费黄色毛片视频| 亚洲AV无一区二区三区久久| 一区二区三区免费视频网站| 国产成人免费永久播放视频平台| 亚洲AV无码一区二区三区鸳鸯影院| 永久在线毛片免费观看| 亚洲第一se情网站| 亚洲人成网站在线观看青青| h视频免费高清在线观看| 国产成人精品日本亚洲专区| 99久久99这里只有免费的精品 | 免费观看91视频| 亚洲午夜精品一区二区| 精品国产免费人成电影在线观看| 91亚洲自偷在线观看国产馆| 妞干网免费视频观看| 麻豆69堂免费视频| 亚洲精品乱码久久久久66| 99在线免费观看视频| 一区二区亚洲精品精华液| 免费国产a国产片高清| 免费人成毛片动漫在线播放| 亚洲图片校园春色| 国产精品jizz在线观看免费| 亚洲第一视频在线观看免费| 久久精品国产亚洲AV麻豆王友容| 四虎在线成人免费网站| 337P日本欧洲亚洲大胆精品| 亚洲国产精品无码AAA片| 4虎永免费最新永久免费地址| 日韩欧美亚洲中文乱码| 亚洲AV无码不卡在线播放| 波多野结衣中文字幕免费视频| 亚洲av乱码一区二区三区按摩| 国产亚洲成归v人片在线观看| 8x网站免费入口在线观看| 国产精品亚洲а∨天堂2021 | 中文字幕亚洲免费无线观看日本| 在线观看日本免费a∨视频| 香蕉视频在线观看免费|