用JavaFX写用户界面控制器 - 编程入门网
def autoCompletedTry = commonLeadingSubstring(filteredTaxons, findMatchingPropertyGetter());
//
// Sometimes it can''t find a better auto-completion than the current filter, since it searches the displayName
// and the scientificName at the same time. In this case, we just ignore the new value.
//
if (autoCompletedTry.length() > filter.length())
{
autoCompleted = autoCompletedTry;
}
selectedTaxonIndex = if (sizeof filteredTaxons == 1) then 0 else -1;
println("selectedTaxonIndex: {selectedTaxonIndex}")
}
protected function findMatchingPropertyGetter(): function (:Taxon): String
{
for (taxon in filteredTaxons)
{
for (propertyGetter in Taxon.namePropertyGetters)
{
if (propertyGetter(taxon).toLowerCase().startsWith(filter.toLowerCase()))
{
return propertyGetter;
}
}
}
return null;
}
// some stuff later
}
用JavaFX写用户界面控制器(3)时间:2011-09-09这个类揭示了以下的属性: ·taxons:你需要用完整的鸟类列表来填充 ·filter: 字符串包括需要输入到搜索栏中的文本 ·filteredTaxons: 种类由filter字符串过滤 ·autoCompleted: 控制器猜测的自动完成输入字符串 ·selectedTaxon: 如果filter向下细分种类,它就会分配到这个变量 ·selectedTaxonIndex: -1如果无法获取时,selectedTaxon的索引。 最新的四种属性由客户代码来绑定,这样做可以获取更改提示。 Filter获取了一个触发事件,也就是变量值更改时所执行的代码。触发器用JavaFX运算符 ︳执行了过滤操作:我们可以将触发事件的第一行当作分配到taxons序列中的filteredTaxons来读取,在这一序列中,matches()函数返回值为true。第二行的代码调用了接下来要介绍的update()函数。 出于某些原因,这种方法并不一定奏效,因为filteredTaxons通常会被整体扫描。有多种方法可用来加速选择过程,但是本文不会在这一方法真正应用到手机前前作出过早的优化。在笔记本上,它可以加快1000个项目的速度。 Matches()函数在所有属性上执行了一次迭代以获取函数并检查看相关属性是否以过滤值启动。 创建获得属性值函数的序列的一大好处是我们可以通过定义新的函数轻松添加新的匹配标准:例如,其他语言中的本地化名称。控制器可能会使用在搜索过程中使用这些名称,而我们则不需要再做多余修改。 Update()函数运算出了自动完成输入提示。它会提取filteredTaxons序列以及用于当前选择的获取属性函数,还会调用刚刚在字符串属性的序列中找到了通用子字符串的commonLeadingSubstring()。它不是每次都会作出很好的自动完成输入猜想,因此有时建议甚至比当前过滤器还短,而这种情况我们大可忽略不计。请不要忽视指定临时变量的重要性:由于自动完成输入可能被绑定,因此我们不想为其指定一个会迅速失效的值。 要明白这一点的重要性,这不仅仅是避免无用更新,还能避免程序被破坏。在实际程序中,自动完成输入更改时,TextBox会更新,因此过滤器也会随之更新:已经输入了"cal"后,再输入一个"i",那么TextBox暂时会显示"cali",然后自动输入完成的猜测失败,它会返回一个"cal",TextBox中的字符串会变为"cal":这时候你要坚持自己的想法!绑定确实很强大,但是它也同时具有负面效应。 最后一步操作中,代码会检查看我们是否获取单独的已选定鸟类。 或许,你对于自动完成输入失败的原 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |