Sacrilege –自定义SWT滚动条

SWT是本机OS小部件之上的薄抽象层。 如果您打算将应用程序与OS外观很好地集成在一起,那将是一件非常好的事情。 但是,作为一种折衷方案,这种方法大大限制了样式功能。

特别是,我感觉到本机SW​​T滚动条通常会干扰更精细的视图布局。 最近遇到此问题,我尝试了一个自定义SWT滚动条小部件。 这篇文章介绍了结果–一个简单的滑块控件,可用作SWT Slider替换或Scrollbar覆盖。

SWT滚动条

SWT的OS滚动条抽象有两种表现形式: org.eclipse.swt.widgets.Scrollbarorg.eclipse.swt.widgets.Slider 。 以下JavaDoc段落说明了这两个小部件之间的区别:

'滚动条不是控件。 在某些平台上,作为某些标准控件(如文本或列表)一部分出现的滚动条没有操作系统资源, 也不是控件的子级。 因此,滚动条受到特殊对待。 要创建看起来像滚动条但具有操作系统资源的控件 ,请使用Slider。

这意味着Slider至少提供最小的编程影响,例如设置其边界。 但是org.eclipse.swt.widgets.Scrollable派生类(具有标准滚动条的所有控件的超类)仅提供只读抽象Scrollbar

例如,这对于响应滚动事件仍然非常有用,但实际上没有任何外观和调整空间。 滑块的应用范围通常仅限于自定义组件,无论出于何种原因,它们都不能使用Composite超类提供的滚动条。

FlatScrollBar

尽管有一些跨平台的障碍需要克服,但是创建自定义滑块很简单。 下图显示了与右侧外壳(OS:Windows 7)上使用的FlatScrollBar控件相比,左侧外壳的本机滑块:

平面滚动条

值得注意的是,自定义滑块在鼠标悬停时展开 ,如竖线所示。 水平条将紧凑的基础外观描绘为谨慎的拇指和选择指示器。 通常, FlatScrollBar本质上模仿Slider/Scrollbar行为,语义和API:

滑模模拟

显然,我决定省略向上和向下箭头,但这只是一个光学调整。 尽管尚未配置,但可以通过在源代码中更改单个常数值来恢复箭头按钮。

ScrollableAdapter

但是Scrollable派生工具的滚动条(例如文本,树,表格等)又如何呢? 作为如上所述的OS控件本身的一部分,它们是不可替换的。 从理论上讲,可以停用滚动并使用某种自定义滚动复合材料来模拟滚动行为。 但这有几个缺点。 我尝试了这种方法,但结果并不令人满意。

但是,将可滚动控件包装到覆盖适配器复合材料中似乎更有希望。 到目前为止,我已经成功地适应了TreeTable控件。

表滚动条覆盖

这就是适配器创建的样子:

new FlatScrollBarTable( parent, ( adapter ) -> new Table( adapter, SWT.NONE ) );

很容易,不是吗? 第二个参数是通用工厂( ScrollableFactory<T extends Scrollable> ),它可以适应各种可滚动类型。 但是由于根本不可能实现通用的覆盖,因此目前仅提供树和表适配器。

适配器通过FlatScrollBarTable#getTable()方法提供对表实例的FlatScrollBarTable#getTable() 。 这也允许毫无问题地适应JFace树和表查看器。

由于Mac OS上的本机滚动条看起来是开箱即用的,因此适配器会从该平台上的自定义叠加层中删除。 仅Gtk和MS Windows平台会受到影响。 因此,标题图像中没有Mac屏幕截图。 但是FlatScrollBar控件本身也可以在OS X上很好地工作。

结论

到目前为止,在我们的项目之一中使用FlatScrollBarScrollableAdapter看起来很有希望。 当然,代码库是相当新的,可能包含一些未发现的问题或缺陷。 但是,我发现有必要向外部受众介绍此控件,这可能有助于发现此类缺陷或导致进一步的要求。

我很好奇这种方法的可持续性,以及是否有可能也适应文本和/或样式化的文本控件。 如果您想签出这些控件,则它们是Xiliary P2存储库的com.codeaffine.eclipse.swt功能的一部分,可从以下网站获得:

  • http://fappel.github.io/xiliary

如果您想看一下代码或提出问题,也可以看一下Xiliary GitHub项目。 查找用法示例的FlatScrollbarDemoFlatScrollBarTreeDemoFlatScrollBarTableDemo

  • https://github.com/fappel/xiliary

翻译自: https://www.javacodegeeks.com/2014/12/sacrilege-a-custom-swt-scrollbar.html

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

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

相关文章

CSS3盒模型温故

CSS有一种基础设计模式叫盒模型&#xff0c;定义了Web页面中的元素是如何看做盒子来解析的。每一个盒子有不同的展示界面&#xff0c;下面就来介绍盒模型&#xff0c;主要有一下几种盒模型&#xff1a;inline、inline-block、block、table、absolute position、float。浏览器把…

SSL与WildFly 8和Undertow

我一直在研究WildFly 8的一些安全性主题&#xff0c;偶然发现了一些配置文档&#xff0c;这些文档没有很好地记录。 其中之一是新Web子系统Undertow的TLS / SSL配置。 有许多关于较旧的Web子系统的文档&#xff0c;并且确实仍然可以使用&#xff0c;但是这里是使用新方法进行配…

CSS属性选择器温故-4

1.属性选择器就是通过元素属性来找到元素 2.属性选择器语法 CSS3遵循了惯用的编码规则&#xff0c;通配符的使用提高了样式表的书写效率&#xff0c;也使CSS3的属性选择器更符合编码习惯 3.浏览器兼容性 CSS选择器总结&#xff1a;CSS选择器和jQuery的选择器非常相似&#xff…

Python多篇新闻自动采集

昨天用python写了一个天气预报采集&#xff0c;今天趁着兴头写个新闻采集的。 目标是&#xff0c;将腾讯新闻主页上所有新闻爬取下来&#xff0c;获得每一篇新闻的名称、时间、来源以及正文。 接下来分解目标&#xff0c;一步一步地做。 步骤1&#xff1a;将主页上所有链接爬取…

使用navicat premium将数据库从Oracle迁移到SQL Server,或从Oracle迁移到MySQL

有时候我们有迁移数据库的需求&#xff0c;例如从Oracle迁移到SQL Server&#xff0c;或者从MySQL迁移到Oracle。 很多江湖好汉一时不知如何手工操作&#xff0c;所幸的是Navicat提供了迁移的自动化操作界面。 当然&#xff0c;Navicat的数据库迁移无法做到完美&#xff0c;一些…

书评:Mockito Essentials

Sujoy Acharya的Mockito Essentials副标题&#xff08; Packt Publishing &#xff0c;2014年10月&#xff09;是&#xff1a;“实用指南&#xff0c;可帮助您使用Mockito进行单元测试并开始运行。” Mockito Essentials中的前言和七章涵盖大约190个实质性页面。 前言 在序言中…

http网站转换成https网站

https&#xff0c;https的本地测试环境搭建,asp.net结合https的代码实现,http网站转换成https网站之后遇到的问题 一&#xff1a;什么是https SSL&#xff08;Security Socket Layer&#xff09;全称是加密套接字协议层&#xff0c;它位于HTTP协议层和TCP协议层之间&#x…

EAGER的获取是代码的味道

介绍 休眠获取策略确实可以使几乎没有爬网的应用程序和响应速度很快的应用程序有所不同。 在这篇文章中&#xff0c;我将解释为什么您应该选择基于查询的获取而不是全局获取计划。 取得101 Hibernate定义了四种关联检索策略 &#xff1a; 提取策略 描述 加入 原始SELECT语…

基于S2SH的电子商务网站系统性能优化

对于经常逛网页的人来说最受不了的事情就是访问的网页加载太慢&#xff0c;除去网络的原因网站的系统性能对加载的快慢非常重要&#xff0c; 网上有个统计&#xff1a; 每慢500ms Google访问量降低20% 每慢400ms Yahoo 访问量降低5-9% 每慢100ms Amazon销售额降低1% 对于商务网…

ExtJs的Reader

ExtJs的Reader Reader : 主要用于将proxy数据代理读取的数据按照不同的规则进行解析,讲解析好的数据保存到Modle中 结构图 Ext.data.reader.Reader 读取器的根类 Ext.data.reader.Json JSON格式的读取器 Ext.data.reader.Array 扩展JSON的Array读取器 Ext.data.reader.Xml XML格…

Java Lambdas和低延迟

总览 有关在Java和低延迟中使用Lambda的主要问题是&#xff1a; 它们会产生垃圾吗&#xff0c;您能做些什么吗&#xff1f; 背景 我正在开发一个支持不同有线协议的库。 这样的想法是&#xff0c;您可以描述要写入/读取的数据&#xff0c;并且有线协议确定它是否使用带有JSon或…

Java中的线程本地存储

开发人员中鲜为人知的功能之一是线程本地存储。 这个想法很简单&#xff0c;并且在需要数据的情况下很有用。 如果我们有两个线程&#xff0c;则它们引用相同的全局变量&#xff0c;但我们希望它们具有彼此独立初始化的单独值。 大多数主要的编程语言都有该概念的实现。 例如&…

多个退货单

我曾经听说过&#xff0c;过去人们为使方法具有单个出口点而奋斗。 我知道这是一种过时的方法&#xff0c;从未认为它特别值得注意。 但是最近&#xff0c;我与一些仍坚持该想法的开发人员进行了联系&#xff08;最后一次是在这里 &#xff09;&#xff0c;这让我开始思考。 因…

GO 语言编程 windows 环境搭建

参考 : http://blog.csdn.net/love_se/article/details/7754274 首先是安装Go&#xff0c;这里有很详细的安装说明&#xff0c;http://code.google.com/p/golang-china/wiki/Install 或者http://golang.org/doc/install 下面我们在window下面安装&#xff0c;google有提供win安…

机打发票打印管理

最近公司也从手写发票换成了机打发票&#xff0c;便应财务的要求做了这么一个简单的发票管理及打印系统&#xff0c;程序并不复杂。 使用C#&#xff08;2.0&#xff09; Access&#xff08;97-2003版&#xff09;/WinForm形式 系统菜单中有企业基本信息设置&#xff0c;见图4…

序列化的概念

讨论了为什么Optional不可序列化以及如何处理&#xff08;即将推出&#xff09;之后&#xff0c;让我们仔细看看序列化。 总览 这篇文章介绍了序列化的一些关键概念。 它尝试精简地执行此操作&#xff0c;而不会涉及太多细节&#xff0c;包括将建议降至最低。 它没有叙述&…

Java飞行记录器(JFR)

JFR是Java分析器&#xff0c;它使您可以研究代码的运行时特征。 通常&#xff0c;您将使用探查器来确定代码的哪些部分导致大量内存分配或导致消耗过多的CPU。 有很多产品在那里。 过去&#xff0c;我使用过YourKit&#xff0c;OptimizeIt&#xff0c;JProfiler&#xff0c;Ne…

图像识别SLIC、Haralick texture features(自备)

SLIC 简单线性迭代聚类(SLIC ),它采用k-means聚类方法来有效地生成超像素。 SLIC超像素分割详解&#xff08;一&#xff09;&#xff08;二&#xff09;&#xff08;三&#xff09;_超像素分割 样本-CSDN博客 超像素分割 & SLIC算法 & 使用示例_slic分割算法matlab-C…

浏览器中的JavaFX

浏览器中的JavaFX屏幕截图 最近&#xff0c;Carl Dea和我启动了一个新项目&#xff0c;将JavaFX 8引入浏览器。 今天&#xff0c;我想介绍我们创建的前两个概念验证&#xff0c;以查看该想法是否完全可行。 对于不耐烦的人&#xff0c;这里是到PoC的链接。 但请注意&#xff0…

MDB!= JMS,反之亦然

基本 消息驱动Bean&#xff08;又称为MDB&#xff09;只是另一个EJB&#xff0c;如无状态&#xff0c;有状态或单例。 使用MessageDriven批注指定。 MDB用于异步消息处理 它们与无状态EJB 相似 &#xff0c;因为它们都是由EJB容器池化的 但是&#xff0c;它们与无状态EJB不同…