快速业务通道

用JavaFX写用户界面控制器 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
因仍然感到很困惑。毕竟,我们正在逐步缩小项目列表。因此,如果你已经输入了"cali",那么所有经过过滤的种类会以"cali"开头,对吗?如果你过滤的是一套单一名称,情况就应该是这样;但是我们是同时对两套名称执行搜索,那么就会产生矛盾。看看下例由"cali"过滤器选取的名称组(英语,科学的):("Calandra Lark", "Melanocorypha calandra"), ("Dunlin", "Calidris alpina"), ("California Quail", "Callipepla californica")

另一个有意思的地方是findMatchPropertyGetter()。它必须猜测当前过滤器是否是以"英语"或"科学"名称运行,而且它还会返回相关的属性获取函数。基本上,控制器已经获取了matches()函数中的这一信息,但是我们会将其移走。可能会有人思考让matches()函数返回一个以上的布林值,但是这是不可能的,因为它是由运算符 ︳过滤序列的时候使用的:该运算符需要一个布林值。或许我们可以为稍后调用信息的操作指定一个成员变量,不过此时的代码应该会更具可读性。

用JavaFX写用户界面控制器(4)

时间:2011-09-09

为了对文章进一步作补充说明,这里给大家列出了最后两个忽略的函数:

      protected function commonLeadingSubstring (taxons: Taxon[], propertyGetter: function (:Taxon): String): String 
  {
  if (sizeof taxons == 0)
  {
  return "";
  }
  if (sizeof taxons == 1)
  {
  return propertyGetter(taxons[0]);
  }
  var common = propertyGetter(taxons[0]);
  for (other in taxons[1..])
  {
  common = commonLeadingSubstring(common, propertyGetter(other));
  if (common == "")
  {
  break; // don''t waste time in further iterations, "" it''s for sure the final result
  }
  }
  return root;
  }
  function commonLeadingSubstring (string1 : String, string2 : String): String
  {
  return if (string1.length() > string2.length())
  {
  commonLeadingSubstring(string2, string1);
  }
  else if (string1 == "")
  {
  "";
  }
  else if (string2.startsWith(string1))
  {
  string1;
  }
  else
  {
  commonLeadingSubstring(string1.substring(0, string1.length() - 1), string2);
  }
  }

用JavaFX写用户界面控制器(5)

时间:2011-09-09

这里的逻辑很简单。通常主要的字符串搜索被分解成了临近字符串对;而对于单一对的搜索则有递归执行。

这里显示了视图类是如何绑定到控制器的:

      package it.tidalwave.bluebillmfx.taxon.view; 
  public class TaxonSearchScreen
  {
  public var taxons : Taxon[];
  var filter = "";
  public-read def controller = TaxonSearchController
  {
  taxons: bind taxons
  filter: bind filter
  }
  def autoCompleted = bind controller.autoCompleted on replace
  {
  if (autoCompleted != "")
  {
  filter = autoCompleted;
  }
  }
  def list = ListBox
  {
  items: bind controller.filteredTaxons
  };
  def searchBox = TextBox
  {
  text: bind filter with inverse
  };
  }

你必须用所有可得的种类加载taxon;ListBox会随着过滤的种类自动更新,TextBox与过滤器是双重指令型绑定。之所以需要双重绑定是因为向搜

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号