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

很多流行的 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();
  }
} 

时间: 2024-10-06 13:36:09

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

了解Eclipse中的JFace数据绑定,第3部分: 使用高级功能

开始之前 关于本系列 "了解 Eclipse 中的 JFace 数据绑定" 系列教程的这一部分介绍了 Eclipse V3.2 中附带的新 JFace 数据绑定应用程序编程接口 (API) 的高级功能. 使用数据绑定 API 可以将您从必须编写样本同步代码的痛苦中解脱出来.JFace 数据绑定 API 为用户界面 (UI) 提供了这种功能,该功能是用 Standard Widget Toolkit (SWT) 和 JFace 编写的.系列教程的前一部分介绍了 API 中的基本组件.本部

了解Eclipse中的JFace数据绑定,第2部分: 绑定的基础知识

开始之前 关于本系列 使用数据绑定 API 可以将您从必须编写样本同步代码的痛苦中解脱出来.JFace 数据绑定 API 为用户界面 (UI) 提供了这种功能,该功能是用 Standard Widget Toolkit (SWT) 和 JFace 编写的. "了解 Eclipse 中的 JFace 数据绑定" 系列教程的 第 1 部分 说明了数据绑定框架的用途,介绍了几个流行的 Java GUI 数据绑定框架,并给出了使用数据绑定的优点和缺点.作为该系列的第 2 部分,本教程将介绍基本

在Eclipse中创建新的重构功能

创建 对重构的强大支持是软件开发人员喜爱Eclipse的一个最为重要的原因.而Eclipse还有一个至少和重构不相上下的优点,那就是其近乎无懈可击的可扩展性.这两者的结合意味着我们可以根据自己的需要来创建展新的重构功能. 介绍 重构在现代软件开发过程中扮演着重要的角色,它能够减轻软件开发人员的工作负担,提高软件开发的生产效率.为了阐明重构的重要性,我们在这里引用了developerWorks上David Carew提供的关于重构的教程中的一段话: 现在,一个开发者的工作大部分在于对现有的代码进行

Eclipse中的图片资源管理

在本文中,将讨论如下内容: 1.系统资源,为后面讨论图片资源做一铺垫 2.SWT中的图片资源管理 3.Display hook销毁机制,JFace中图片资源管理的重要基础 4.JFace中的ImageDescriptor 5.JFace中的图片资源管理(ImageRegistry) 6.JFace中图片资源管理ImageRegistry所适用的场景和使用规则 7.Eclipse中插件share images机制 8.在Eclipse插件开发或者开发RCP程序时,使用图片资源需要的注意事项 [系统

eclipse中的cvs为什么无法查看历史记录了,并报错了。

问题描述 eclipse中的cvs为什么无法查看历史记录了,并报错了. 问题描述:我在eclipse中点击一个项目中的一个activity的文件-->右键-->选择Team-->show history(查看cvs中的历史文件)后报错了.无法查看到cvs中以前的历史记录了,为什么啊?求帮助啊!!! 报错信息: java.lang.IllegalArgumentException: Argument not valid at org.eclipse.swt.SWT.error(SWT.ja

eclipse中svn1.10.9插件设置Ignored Resources中.project等无效

问题描述 eclipse中svn1.10.9插件设置Ignored Resources中.project等无效 Myeclipse中svn1.10.9插件设置Ignored Resources中.project等不起作用下面是myeclipse配置的图片: 解决方案 重启也不可用,是插件本身问题 解决方案二: 你重启了吗?重启下试试

在Eclipse中构建备忘单

Eclipse提供了一种用于显示迷你型指南的内置机制,称为备忘单(cheat sheet).备忘单可以快速而有效地指导您如何在Eclipse中执行包含多个步骤的过程,它显示在工作台的边角处,您可以容易且快速地查看它们. 本教程演示了如何为Eclipse构造备忘单.构造完毕之后,它们还可以运行在BEA Workshop Studio.BEA Workshop for WebLogic和其他任何Eclipse系统之上,或许能对您现有的工具和插件进行补充.示例下载中提供了3个准备好的备忘单,其中一个备

servlet-Red5-1.0集成到eclipse中启动报错

问题描述 Red5-1.0集成到eclipse中启动报错 2015-7-4 19:09:27 org.apache.catalina.core.ApplicationContext log 严重: StandardWrapper.Throwable org.springframework.beans.factory.access.BootstrapException: Unable to initialize group definition. Group resource name [clas

eclipse中头文件无法识别??

问题描述 eclipse中头文件无法识别?? 解决方案 c++中头文件C++中头文件