没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|其它|编辑:郝浩|2009-06-18 11:28:37.000|阅读 822 次
概述:JavaFX对于用户界面非常有用,用它来编写控制器也很有帮助。当然这里说指的不是用JavaFX来编写一个完整的程序。可能要将它的使用范围拓宽还是有些问题。但是指定的模式和前端控制器都没有问题,而且你也可以利用其中的Binding。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
这个类揭示了以下的属性:
·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":这时候你要坚持自己的想法!绑定确实很强大,但是它也同时具有负面效应。
最后一步操作中,代码会检查看我们是否获取单独的已选定鸟类。
或许,你对于自动完成输入失败的原因仍然感到很困惑。毕竟,我们正在逐步缩小项目列表。因此,如果你已经输入了"cali",那么所有经过过滤的种类会以"cali"开头,对吗?如果你过滤的是一套单一名称,情况就应该是这样;但是我们是同时对两套名称执行搜索,那么就会产生矛盾。看看下例由"cali"过滤器选取的名称组(英语,科学的):("Calandra Lark", "Melanocorypha calandra"), ("Dunlin", "Calidris alpina"), ("California Quail", "Callipepla californica")
另一个有意思的地方是findMatchPropertyGetter()。它必须猜测当前过滤器是否是以"英语"或"科学"名称运行,而且它还会返回相关的属性获取函数。基本上,控制器已经获取了matches()函数中的这一信息,但是我们会将其移走。可能会有人思考让matches()函数返回一个以上的布林值,但是这是不可能的,因为它是由运算符 ︳过滤序列的时候使用的:该运算符需要一个布林值。或许我们可以为稍后调用信息的操作指定一个成员变量,不过此时的代码应该会更具可读性。
为了对文章进一步作补充说明,这里给大家列出了最后两个忽略的函数:
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);
}
}
这里的逻辑很简单。通常主要的字符串搜索被分解成了临近字符串对;而对于单一对的搜索则有递归执行。
这里显示了视图类是如何绑定到控制器的:
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与过滤器是双重指令型绑定。之所以需要双重绑定是因为向搜索栏中输入时,一个指令用于给控制器发出新的选择命令,另一个则是自动完成输入时的更新。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:IT专家网面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号