<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中文技術文摘
    主站蜘蛛池模板: 2048亚洲精品国产| 永久免费av无码网站大全| 亚洲午夜国产精品无码| 五级黄18以上免费看| 免费在线观看毛片| 一级毛片在线完整免费观看| 一本色道久久88亚洲综合| 特级毛片A级毛片免费播放| 亚洲精品无码av天堂| 全黄大全大色全免费大片| 国产∨亚洲V天堂无码久久久| 四虎影视无码永久免费| 亚洲天堂一区二区| 一二三四在线播放免费观看中文版视频 | 亚洲伊人久久大香线蕉AV| 毛片免费观看网址| MM1313亚洲国产精品| 亚洲精品久久久www | 日韩在线观看视频免费| 国产成人精品日本亚洲专区61 | 亚洲一级特黄大片无码毛片| 国产精品福利在线观看免费不卡| 国产精品亚洲视频| 99久久国产免费中文无字幕| 亚洲人和日本人jizz| 手机看片久久国产免费| 成人免费ā片在线观看| 亚洲美女色在线欧洲美女| 黄瓜视频高清在线看免费下载| 色婷婷亚洲一区二区三区| 亚洲精品成人片在线播放| 无人在线直播免费观看| 美女啪啪网站又黄又免费| 亚洲Av综合色区无码专区桃色| **实干一级毛片aa免费| 日韩亚洲国产高清免费视频| 免费人成在线观看视频播放 | 亚洲国产欧美国产综合一区 | www国产亚洲精品久久久| 久久狠狠躁免费观看2020| 亚洲一区二区三区在线|