用JavaFX写用户界面控制器 - 编程入门网
因仍然感到很困惑。毕竟,我们正在逐步缩小项目列表。因此,如果你已经输入了"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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |