WEB开发网      婵犵數濮烽弫鍛婄箾閳ь剚绻涙担鍐叉搐绾剧懓鈹戦悩瀹犲闁汇倗鍋撻妵鍕箛閸洘顎嶉梺绋款儑閸犳劙濡甸崟顖氬唨闁靛ě浣插亾閹烘鈷掗柛鏇ㄥ亜椤忣參鏌″畝瀣暠閾伙絽銆掑鐓庣仭缁楁垿姊绘担绛嬪殭婵﹫绠撻、姘愁樄婵犫偓娴g硶鏀介柣妯款嚋瀹搞儱螖閻樺弶鍟炵紒鍌氱Ч瀹曟粏顦寸痪鎯с偢瀵爼宕煎☉妯侯瀳缂備焦顨嗗畝鎼佸蓟閻旈鏆嬮柣妤€鐗嗗▓妤呮⒑鐠団€虫灀闁哄懐濮撮悾鐤亹閹烘繃鏅濋梺闈涚墕濡瑩顢欒箛鏃傜瘈闁汇垽娼ф禒锕傛煕閵娿儳鍩f鐐村姍楠炴﹢顢欓懖鈺嬬幢闂備浇顫夊畷妯肩矓椤旇¥浜归柟鐑樻尭娴滃綊姊虹紒妯虹仸闁挎洍鏅涜灋闁告洦鍨遍埛鎴︽煙閼测晛浠滃┑鈥炽偢閹鈽夐幒鎾寸彇缂備緡鍠栭鍛搭敇閸忕厧绶炴俊顖滅帛濞呭洭姊绘担鐟邦嚋缂佽鍊垮缁樼節閸ャ劍娅囬梺绋挎湰缁嬫捇宕㈤悽鍛婄厽閹兼番鍨婚埊鏇㈡煥濮樿埖鐓熼煫鍥ュ劤缁嬭崵绱掔紒妯肩畺缂佺粯绻堝畷姗€濡歌缁辨繈姊绘担绛嬪殐闁搞劋鍗冲畷顖炲级閹寸姵娈鹃梺缁樻⒒閳峰牓寮崒鐐寸厱闁抽敮鍋撻柡鍛懅濡叉劕螣鐞涒剝鏂€闂佺粯鍔曞Ο濠囧吹閻斿皝鏀芥い鏃囨閸斻倝鎽堕悙鐑樼厱闁哄洢鍔屾晶顖炴煕濞嗗繒绠婚柡灞界Ч瀹曨偊宕熼鈧▍锝囩磽娴f彃浜炬繝銏f硾椤戝洨绮绘ィ鍐╃厵閻庢稒岣跨粻姗€鏌ㄥ☉妯夹fい銊e劦閹瑩顢旈崟顓濈礄闂備浇顕栭崰鏍礊婵犲倻鏆﹂柟顖炲亰濡茶鈹戦埄鍐ㄧ祷妞ゎ厾鍏樺璇测槈閵忕姈鈺呮煏婢跺牆鍔撮柛鏂款槺缁辨挻鎷呯粙搴撳亾閸濄儳鐭撶憸鐗堝笒閺嬩線鏌熼崜褏甯涢柡鍛倐閺屻劑鎮ら崒娑橆伓 ---闂傚倸鍊搁崐鐑芥倿閿旈敮鍋撶粭娑樺幘濞差亜鐓涢柛娑卞幘椤斿棝姊虹捄銊ユ珢闁瑰嚖鎷�
开发学院软件开发Java 了解 Eclipse 中的 JFace 数据绑定,第 1 部分: 数... 阅读

了解 Eclipse 中的 JFace 数据绑定,第 1 部分: 数据绑定的优缺点

 2009-12-14 00:00:00 来源:WEB开发网 闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷闂傚倸鍊搁崐椋庣矆娓氣偓楠炲鏁撻悩鎻掔€梺姹囧灩閻忔艾鐣烽弻銉︾厵闁规鍠栭。濂告煕鎼达紕校闁靛洤瀚伴獮鎺楀箣濠靛啫浜鹃柣銏⑶圭壕濠氭煙閻愵剚鐏辨俊鎻掔墛缁绘盯宕卞Δ鍐冣剝绻涘畝濠佺敖缂佽鲸鎹囧畷鎺戭潩閹典焦鐎搁梻浣烘嚀閸ゆ牠骞忛敓锟�婵犵數濮烽弫鍛婃叏椤撱垹绠柛鎰靛枛瀹告繃銇勯幘瀵哥畼闁硅娲熷缁樼瑹閳ь剙岣胯鐓ら柕鍫濇偪濞差亜惟闁宠桨鑳堕崝锕€顪冮妶鍡楃瑐闁煎啿鐖奸崺濠囧即閵忥紕鍘梺鎼炲劗閺呮稒绂掕缁辨帗娼忛埡浣锋闂佽桨鐒﹂幑鍥极閹剧粯鏅搁柨鐕傛嫹闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷  闂傚倸鍊搁崐鐑芥嚄閼哥數浠氱紓鍌欒兌缁垶銆冮崨鏉戠厺鐎广儱顦崡鎶芥煏韫囨洖校闁诲寒鍓熷铏圭磼濡搫顫岄梺鍦拡閸嬪棝鎯€椤忓浂妯勯梺鍝勬湰濞叉ḿ鎹㈠┑濠勭杸闁哄洨濮烽悰銉╂⒒娴e搫甯跺鐟帮攻缁傚秴饪伴崼姘e亾閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡涱€楀褜鍠栭湁闁绘ɑ鐟ョ€氼喚绮绘ィ鍐╃厱妞ゆ劑鍊曢弸搴ㄦ煟韫囧鍔滈柕鍥у瀵潙螣閸濆嫬袝婵$偑鍊戦崹娲偡閳哄懎绠栭柍鈺佸暞閸庣喖鏌曢崶褍绨婚柟鍑ゆ嫹
核心提示:很多流行的 Web 应用程序都有视图层的特性,视图层足够智能可以将请求和应答变量与 HTML 输入标记同步,了解 Eclipse 中的 JFace 数据绑定,第 1 部分: 数据绑定的优缺点,此过程可以轻松地完成,因为用户输入是通过 Web 应用程序的结构层和 HTTP 来路由的,最后,请注意对 GUI 组件的引用在对

很多流行的 Web 应用程序都有视图层的特性,视图层足够智能可以将请求和应答变量与 HTML 输入标记同步。此过程可以轻松地完成,因为用户输入是通过 Web 应用程序的结构层和 HTTP 来路由的。而另一方面,Java GUI 应用程序经常都不能支持这种特性。无论是用 Standard Widget Toolkit (SWT) 编写还是用 Swing 编写,这些 Java GUI 应用程序的域对象与其 GUI 控件 (通常也称为 组件) 之间通常都没有定义好的路径。

样本(boilerplate)数据同步

打乱顺序最糟糕的结果是造成数据混乱,最幸运的结果是大块样本同步代码出现 bug。参考 清单 1 中的代码引用。这是一个称为 FormBean 的简单的域对象的定义。当一个对话框需要使用此数据时,对话框必须从域对象中提取此数据并将数据插入组件才能显示,如位于构建程序的末尾的方法调用中所示。相应地,在用户更改信息后,必须将此数据从 GUI 组件中提取出来并放回域模型中。这种往复过程是通过 syncBeanToComponents() 和 syncComponentsToBean() 方法来执行的。最后,请注意对 GUI 组件的引用在对象范围内必须保持可用,这样才能在同步方法中访问这些组件。


清单 1. 没有数据绑定的 Swing 对话框

package com.nfjs.examples; 
import com.jgoodies.forms.layout.FormLayout; 
import com.jgoodies.forms.layout.CellConstraints; 
import com.jgoodies.forms.builder.DefaultFormBuilder; 
 
import javax.swing.*; 
import java.awt.event.ActionEvent; 
 
public class NoBindingExample { 
 
  private JFrame frame; 
  private JTextField firstField; 
  private JTextField lastField; 
  private JTextArea descriptionArea; 
  private FormBean bean; 
 
  public NoBindingExample() { 
    frame = new JFrame(); 
 
    firstField = new JTextField(); 
    lastField = new JTextField(); 
    descriptionArea = new JTextArea(6, 6); 
 
    DefaultFormBuilder builder = 
     new DefaultFormBuilder(new FormLayout("r:p, 2dlu, f:p:g")); 
    builder.setDefaultDialogBorder(); 
    builder.append("First:", firstField); 
    builder.append("Last:", lastField); 
    builder.appendRelatedComponentsGapRow(); 
    builder.appendRow("p"); 
    builder.add(new JLabel("Description:"), 
          new CellConstraints(1, 
           5, CellConstraints.RIGHT, 
           CellConstraints.TOP), 
          new JScrollPane(descriptionArea), 
          new CellConstraints(3, 
           5, CellConstraints.FILL, 
           CellConstraints.FILL)); 
 
    builder.nextRow(2); 
    builder.append(new JButton(new MessageAction())); 
 
    frame.add(builder.getPanel()); 
    frame.setSize(300, 300); 
 
    bean = new FormBean(); 
    syncBeanToComponents(); 
  } 
 
  private void syncBeanToComponents() { 
    firstField.setText(bean.getFirst()); 
    lastField.setText(bean.getLast()); 
    descriptionArea.setText(bean.getDescription()); 
  } 
 
  private void syncComponentsToBean() { 
    bean.setFirst(firstField.getText()); 
    bean.setLast(lastField.getText()); 
    bean.setDescription(descriptionArea.getText()); 
  } 
 
  public JFrame getFrame() { 
    return frame; 
  } 
 
  private class FormBean { 
    private String first; 
    private String last; 
    private String description; 
 
    public FormBean() { 
      this.first = "Scott"; 
      this.last = "Delap"; 
      this.description = "Description"; 
    } 
 
    public String getFirst() { 
      return first; 
    } 
 
    public void setFirst(String first) { 
      this.first = first; 
    } 
 
    public String getLast() { 
      return last; 
    } 
 
    public void setLast(String last) { 
      this.last = last; 
    } 
 
    public String getDescription() { 
      return description; 
    } 
 
    public void setDescription(String description) { 
      this.description = description; 
    } 
  } 
 
  private class MessageAction extends AbstractAction { 
    public MessageAction() { 
      super("Message"); 
    } 
 
    public void actionPerformed(ActionEvent e) { 
      syncComponentsToBean(); 
      JOptionPane.showMessageDialog(null, "First name is " + bean.getFirst()); 
    } 
  } 
 
  public static void main(String[] args) { 
    NoBindingExample example = new NoBindingExample(); 
    example.getFrame().show(); 
  } 
} 

1 2 3 4 5 6  下一页

Tags:了解 Eclipse JFace

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接