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

Sacrilege –自定义SWT滚动条相关推荐

  1. css自定义横向滚动条样式,css滚动条样式自定义

    很简单的几行代码 Title * { margin: 0; padding: 0; } .out { width: 600px; height: 600px; margin: 100px auto; ...

  2. 自定义侧边栏滚动条样式

    一.如果一个容器盒子的内容超出元素的高度,如何自定义侧边栏滚动条样式? 1.给这个容器设置 overflow-y:auto;或者overflow-x:auto:这样超出的内容就可以滚动了 2.给这个容 ...

  3. 自定义浏览器滚动条的样式,详细讲解

    CSS3自定义滚动条样式 -webkit-scrollbar 有时候觉得浏览器自带的原始滚动条不是很美观,那webkit浏览器是如何自定义滚动条的呢? Webkit支持拥有overflow属性的区域, ...

  4. 用 HTML 元素实现自定义的滚动条

    用 HTML 元素实现自定义的滚动条 有时,浏览器默认的滚动条不能满足需求,我们要实现自定义的滚动条.借助于鼠标移动事件和滚轮事件,以及内容元素的滚动相关属性,可以很容易地实现这样的需求.下面就来试一 ...

  5. jQuery——自定义浏览器滚动条,改变滚动条样式。实现滚动条效果

    自定义浏览器滚动条,并实现滚动条功能 废话少说,直接上代码: HTML <div class="scroll-box" onscroll="onScroll()&q ...

  6. 自定义浏览器滚动条样式(兼容chrome和firefox)

    大家好,我是前端队长Daotin,想要获取更多前端精彩内容,关注我,解锁前端成长新姿势. 以下正文: 问题描述 浏览器默认的滚动条样式太丑了,而且不同的浏览器下滚动条的样式也不一样,为了美观和统一,必 ...

  7. 用css去自定义页面滚动条的样式(谷歌浏览器,PC端)

    用css去自定义页面滚动条的样式(谷歌浏览器,PC端) 常用的自定义滚动条样式,只需要用到三个属性 1.::-webkit-scrollbar 2.::-webkit-scrollbar-track ...

  8. 自定义浏览器滚动条的样式

    自定义IE浏览器滚动条样式 追溯浏览器对滚动条的自定义,恐怕最早的就是IE浏览器了(好像最开始支持的版本是IE5.5).下面列出了多个版本的支持性况: 滚动条样式 支持情况 支持浏览器版本 可否继承 ...

  9. 自定义浏览器滚动条样式

    转载自:https://www.lyblog.net/detail/314.html 自定义IE浏览器滚动条样式 追溯浏览器对滚动条的自定义,恐怕最早的就是IE浏览器了(好像最开始支持的版本是IE5. ...

最新文章

  1. 【转载】yolo数据增强和评价方法
  2. 【剑仙教程】易语言的结构体。自定义数据类型。
  3. gin ajax 获取请求参数,go的gin框架从请求中获取参数的方法
  4. 凌云架构V0.1——第一部分 Why架构?——第一章 新项目来了
  5. 14行代码AC——1017 A除以B (20分)(大数运算+讲解)
  6. 8位可控加减法电路设计_高级工程师:相同的地线GND,却有不同的电路设计含义...
  7. php无限次执行函数,php-PHP一个方法根据传递值怎么执行多次?
  8. Linux创建SSH信任关系
  9. 《Spring技术内幕》——2.3节IoC容器的初始化过程
  10. Java Architecture [JAVA的架构]
  11. 桌面被恶意软件放上几个ie图标删除不了怎么办?
  12. 推荐x61使用nhc软件控制风扇
  13. Java UDP通信详解:单播、广播、组播
  14. java随机生成姓名
  15. mysql 5.6 msvcr100_mysql 5.6.46 安装到winserver2012(x64) 遇到 MSVCR100.dll is missing
  16. 二进制加法器原理c语言,加法器电路原理_二进制加法器原理_与非门二进制加法器...
  17. 链脉企业文化篇之“链脉爱的早会”
  18. robots.txt存放的位置robots.txt文件的作用及写法 (搜索引擎)
  19. 几何光学学习笔记(23)- 5.6 远心光路
  20. python3爬取网易云歌曲的相关信息

热门文章

  1. hibernate配置详情2(Dept.hbm.xml)
  2. String path = request.getContextPath()和String basePath = request.getScheme()
  3. 通过图书编号查询python_Python图书接口调用代码实例
  4. mybatis_user_guide(8) 日志
  5. Spring IOC 如何解决循环依赖?
  6. Spring_02_AOP初级总结
  7. 古巴比伦乘法_古巴:为生产做准备
  8. 对称密钥加密算法 对称轮数_选择Java加密算法第2部分–单密钥对称加密
  9. jax-ws和jax-rs_JAX-RS和JSON-P集成
  10. guava集合操作类的使用_使用Guava进行测试集合的实现