JavaFX技巧3:使用回调接口

作为UI框架开发人员,提供自定义控件外观和行为的方法是我工作的一部分。 在许多情况下,这是通过允许框架用户在控件上注册工厂来完成的。 过去,我会为此创建一个工厂接口,并在框架内提供一个或多个默认实现。

这些事情在JavaFX中的处理方式有所不同,我已经开始为自己的工作而接受它了。 JavaFX使用一个称为javafx.util.Callback的通用接口,只要需要一段代码即可为给定参数(P)生成结果(R)的地方。

该界面如下所示:

public interface Callback<P,R> {public R call(P param);
}

优点

起初,我不喜欢使用此接口,因为我的代码太冗长:我不再拥有不解释的接口名称。 但最后我意识到优势在于缺乏详细性。 优点是:

  • 我们最终减少了编写代码。 没有专用接口,没有默认实现。
  • 使用API​​的开发人员不必记住不同的工厂,而是可以专注于要创建的对象以及对他可用的参数。
  • 回调接口是功能接口。 我们可以使用Lambda表达式,这使代码更加优雅,并且我们不得不再次编写更少的代码。

案例分析

FlexGanttFX框架包含一个名为Dateline的控件,用于显示(惊奇)日期。 每个日期都显示在其自己的单元格中。 日界线可以显示不同的时间单元(ChronoUnit从java.time,和从SimpleUnit FlexGanttFX)。 工厂方法用于根据所示的时间单位构建单元。

在使用回调方法之前,我遇到以下情况:一个名为DatelineCellFactory的接口,其中只有一个方法createDatelineCell() 。 我提供了两个默认实现,分别称为ChronoUnitDatelineCellFactorySimpleUnitDatelineCellFactory 。 通过使用回调,我能够删除所有三个接口/类,并且在日期行的外观中找到了以下两行:

dateline.setCellFactory(<span class="skimlinks-unlinked">SimpleUnit.class</span>,unit -> new SimpleUnitDatelineCell());dateline.setCellFactory(<span class="skimlinks-unlinked">ChronoUnit.class</span>,unit -> new ChronoUnitDatelineCell());

两行代码而不是三个文件! 我认为这个例子说明了一切。

翻译自: https://www.javacodegeeks.com/2014/04/javafx-tip-3-use-callback-interface.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爱课程c语言函数2的作业答案,C语言程序设计

Q&#xff1a;本门课程面向的授课群体是什么&#xff1f;没有任何基础能学习本课程吗&#xff1f;A&#xff1a;本门课程的基本内容是面向零基础的学生。进阶内容是面向有一定编程基础或者大学计算机基础的学生&#xff0c;但是进阶内容不做为课程考试内容。Q&#xff1a;本课程…

旧文章搬运完毕

花了一天时间&#xff0c;把原来百度空间里200多篇文章里的70篇重要文章&#xff08;除去扯淡的&#xff09;搬了出来。 希望这些资料对初学者能够有点用&#xff0c;以后有时间还是继续多写一些有用的内容出来。转载于:https://www.cnblogs.com/achillis/p/10183787.html

voinc vue实现级联选择

需求&#xff1a; vonic中实现级联选择 <!DOCTYPE html> <html> <head><title>下拉框</title><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1"><link rel…

爬虫521错误(又是一次和可爱的前端vs的故事)

起因: 今天突然想重构一下代理池,并且想扩充一下代理,所以就想着爬点代理IP,然后就有了下面的故事 一上来先进行了一顿操作: def get_xxdaili(url):headers {User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safar…

c语言编译器怎样退出全屏,BOOX 应用软件怎样退出全屏模式?

​相信很多用BOOX阅读器的小伙伴都知道BOOX的系统是安卓系统&#xff0c;相对于Kindle的原生Linux系统&#xff0c;BOOX的安卓系统的开放性会更强&#xff0c;可以自由下载一些第三方应用软件。天弟知道很多小伙伴们喜欢在一些第三方应用软件上面看书的习惯&#xff0c;比如像多…

Java 8 Friday:不再需要ORM

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 Java 8星期五 每个星期五&#xff0c;我们都会向您展示一些不错的教程风格的Java 8新功能&#…

Pwn相关工具安装

$apt-get update $apt-get install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential $pip install --upgrade pip $sudo pip install pwntools sudo apt-get install nasm,gcc,gdb,binutils,hexedit #32位libc库 sudo apt-get install lib…

c 语言输出指针的值,C 语言指针

C 语言指针在本教程中&#xff0c;您将学习指针。什么是指针&#xff0c;如何使用它们以及在示例的帮助下使用它们时可能遇到的常见错误。指针是 C和C 编程的强大功能。在学习指针之前&#xff0c;让我们学习一下C语言编程中的地址。C 语言地址如果程序中有变量var&#xff0c…

Rabbitmq - 配置

目录 RabbitMQ 配置简介环境变量配置文件运行时参数和策略RabbitMQ 配置 简介 默认配置&#xff0c;已经可以有效地运行RabbitMQ&#xff0c;并且在大多数情况下不需要更改配置。不过为了在生产环境中稳定、高效的运行&#xff0c;RabbitMQ提供了三种方式来定制化服务 环境变量…

Java EE CDI限定词:快速浏览

在上下文和依赖注入&#xff08;CDI&#xff09;中&#xff0c; 限定符是类型安全和松散耦合的主体。 为什么&#xff1f; 没有CDI&#xff0c;我们将以类似于下面的方式注入Java EE组件 注意&#xff1a;这实际上不会编译&#xff0c;只是假设的代码片段 例子1 例子2 上述…

Windows 系统光盘刻录教程-光盘怎样刻录?刻录数据光盘用轨道一次写入还是光盘一次写入?...

刻录光盘需要 DVD-RW 的光驱&#xff0c;并且光盘需要 DVD-R 的光盘用于刻录。刻录工具可以使用 https://cn.ultraiso.net/ 来进行刻录。选择软件目录 中 工具 &#xff0c;选择 刻录光盘映像 即可进行配置&#xff1a; 此时涉及到了光盘写入的方式的选择问题&#xff0c;在网上…

webpack编译时No PostCSS Config的解决方法

1. {loader:"postcss-loader",options: { // 如果没有options这个选项将会报错 No PostCSS Config foundplugins: (loader) > [require(autoprefixer)(), //CSS浏览器兼容]}}2.在项目根目录新建 postcss.config.js文件&#xff0c;并对 postcss进行配置…

c语言库文件是dll还是lib,C语言之静态链接库与动态链接库(2)

我们发现&#xff0c;无论是静态链接库还是动态链接库&#xff0c;最后都有lib文件&#xff0c;那么两者区别是什么呢&#xff1f;其实&#xff0c;两个是完全不一样的东西。静态库对应的lib文件叫静态库&#xff0c;动态库对应的lib文件叫导入库。实际上静态库本身就包含了实际…

NTC3950-10K温度传感器

一、计算公式 补充&#xff1a; B3950 R10K T225度 查RT表&#xff0c;25度对应的是10K 电路&#xff1a;   热敏电阻与上拉电阻R813分压&#xff0c;获取温度与Vo电压的关系&#xff0c;在根据Vo折算出与MCU ADC的数值。 再将ADC代出Rt&#xff0c;即得到ADC与T的关系公式。…

使不安全变得更加安全

总览 如果直接使用Unsafe&#xff0c;则可能会导致JVM崩溃。 当您访问尚未映射的内存页面并且在Unix上的结果是SIGSEG&#xff08;如果您访问页面0&#xff09;或SIGBUS&#xff08;如果您访问另一个未映射的页面&#xff09;时&#xff0c;就会发生这种情况。 使用MethodHand…

二分搜索树的基本实现

基本操作的动画演示 插入&#xff08;略&#xff09; 搜索&#xff08;略&#xff09; 删除节点 代码 package com.yunche.datastructure;import java.util.LinkedList; import java.util.Queue;/*** ClassName: BST* Description: 二叉搜索树&#xff1a;每个节点的左子树的值…

js ||

||或位符号 a || b 1.当a ,b 均为true时&#xff0c;return a 2.当 a,b均为false时&#xff0c;return b 3.当a,b为一false一true,return true的那个值 && 与位符号 a&&b 1.当a,b均为true时&#xff0c;return b 2.当&#xff0c;b均为false时&#xff…

计算机c语言二级题型,计算机二级C语言题型和评分标准

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼全国计算机二级考试大题把题目给定程序删除了&#xff0c;正确运行&#xff0c;这样会不会给分&#xff1f;50、请编写函数fun, 函数的功能是: 将M行N列的二维数组中的数据, 按列的顺序依次放到一维数组中。函数fun中给出的语句仅供…

什么是Mockito Extra接口?

如果要编写轻量级的JUnit测试&#xff0c; Mockito是我最喜欢的小帮手。 如有必要&#xff0c;可以通过模拟轻松地替换被测单元的“实际”依赖关系&#xff0c;这非常有用。 尤其是在处理框架API的边界线时&#xff0c;此类依赖项的设置否则可能非常昂贵。 但是有时候情况要复…

d9900 修改ip 思科dcm_思科设备SSH登陆详细配置过程

思科设备SSH登陆详细配置过程我们用GNS3进行拓扑搭建。实验拓扑图如下&#xff1a;进行完基本配置之后开始配置SSH服务器(R2)1.首先验证设备是否支持SSHR2#show ip ssh能够识别这条命令就说明支持。2.配置IP域名。使用config# ip domain-name domain-name全局配置模式命令配置网…