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,一经查实,立即删除!

相关文章

关键字屏蔽-正则

【问题】关键字屏蔽是社交类软件必做的功能&#xff0c;当然了&#xff0c;一般来讲都是产品的中后期来做&#xff1b;不同产品规定不一样&#xff0c;跟着产品运营走&#xff0c;可以的 【方法】我们从技术的角度来看到这个问题&#xff0c;实现一个功能后者说实现一个需求&a…

Sub-Projects in Xcode(Xcode中的子项目)

source:http://www.cocoanetics.com/2011/12/sub-projects-in-xcode/ translation:http://www.xiaojiayi.com/2012/08/15/xcode中的子项目&#xff08;译文&#xff09;/ is work! 转载于:https://www.cnblogs.com/snowleung/archive/2012/09/26/2703250.html

堆上与堆外的内存使用情况

总览 最近有人问我在Java中使用堆内存的好处和智慧。 面临相同选择的其他人可能会对这些答案感兴趣。 堆外内存没什么特别的。 线程堆栈&#xff0c;应用程序代码&#xff0c;NIO缓冲区都在堆外。 实际上&#xff0c;在C和C 中&#xff0c;您只有非托管内存&#xff0c;因为默…

从CSS实现正片叠底看=混合模式mix-blend-mode

兼容性&#xff1a;这个东西说多了也没意思&#xff0c;像HTML5和CSS3这种兼容性时刻变化的东东&#xff0c;我们最好在自己支持的设备上实验&#xff0c;不支持&#xff0c;就在想办法呗&#xff0c;这个东西就是为了方便和好玩 所有属性&#xff1a; mix-blend-mode: normal…

实现对gridview删除行时弹出确认对话框的四种方法

实现对gridview删除行时弹出确认对话框的四种方法 在.net2.0中&#xff0c;实现对gridview删除行时弹出确认对话框的四种方法 1&#xff0c;GridView中如何使用CommandField删除时&#xff0c;弹出确认框? 在VS2005提供的GridView中我们可以直接添加一个CommandField删除列&am…

我最喜欢的Java拼图2 + 1 = 4

这是我当前最喜欢的Java难题。 您如何获取代码来执行此操作&#xff1f; Integer b 2; Integer c 1;System.out.println("bc : " (bc) ); // output: bc : 4 !!Sytem.out.println&#xff08;&#xff09;没有技巧&#xff0c;即您将能够在调试器中看到相同的值。…

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;但是这里是使用新方法进行配…

伸展树

伸展树结合了二叉搜索树BST及二叉平衡树AVL的旋转特点&#xff0c;在每一次访问到某节点时都通过旋转将该节点往上推一位&#xff0c;由于没有保存高度信息因为空间复杂度稍优于二叉平衡树。伸展树的插入&#xff0c;删除&#xff0c;搜索的平均时间复杂度均为o(logn)&#xff…

CSS属性选择器温故-4

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

如何封装Spring bean

据我所知&#xff0c;Spring Framework除了具有单独的上下文之外&#xff0c;没有提供任何封装Spring bean的机制。 因此&#xff0c;当您在Spring的Inversion of Control容器中注册了公共类时&#xff0c;可以通过相同的上下文配置将其自动连接到任何Spring bean中。 这非常强…

分享下自己的EmpireofCode进攻策略 https://empireofcode.com/ https://empireofcode.com/game/#

# 没什么用&#xff0c;该游戏的模块调用不友好&#xff0c;取数据难import queue from battle import commander # import mathunit_client commander.Client() doing_last_order True towerid [] towerrg [] towerfr [] towerps [] tower_id 0 towers [] safe_posi[4…

Python多篇新闻自动采集

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

使用ADF BC管理保存点

在使用ADF BC时&#xff0c;我们通常依赖于在数据库中执行DML操作的框架。 在DBTransaction提交周期内&#xff0c;该框架正确地在数据库中进行了所有必要的更新。 很酷的事情是&#xff0c;在这种情况下&#xff0c;数据库事务将被自动管理。 因此&#xff0c;如果出现问题&am…

sql优化(转)

(转)SQL 优化原则一、问题的提出 在应用系统开发初期&#xff0c;由于开发数据库数据比较少&#xff0c;对于查询SQL语句&#xff0c;复杂视图的的编写等体会不出SQL语句各种写法的性能优劣&#xff0c;但是如果将应用 系统提交实际应用后&#xff0c;随着数据库中数据的增加&a…

2017-12-04HTML table布局

<!DOCTYPE html> <html> <head lang"en"> <meta charset"UTF-8"> <title>table布局</title> </head> <body marginwidth"0px" marginheight"0px"> <table width"…

Java EE 8发生了什么? (第2部分)

Java EE 8的工作仍处于初期阶段&#xff0c;预计在来年会紧跟潮流&#xff0c;我们将看到专家组的形成完成&#xff0c;围绕用例/功能的更多讨论&#xff0c;许多JIRA&#xff0c;以及各种规范的草案版本&#xff08;本会很有趣&#xff01;&#xff09;。 在第1部分中 &#…

foreach语句的的解析

我这个虾米&#xff0c;今天才知道foreach语句是这样解析的&#xff0c;惭愧啊&#xff01;幸好我最新在原生态的学习这门编程语言。 //程序中我们这样写foreachforeach (Person item in Persons){Console.WriteLine(item);} //其实如果要使用foreach,需要实现IEnumerator接口&…

滚动条位置判断

//获取滚动条距离顶部位置function getScrollTop() { var scrollTop 0; if (document.documentElement && document.documentElement.scrollTop) { scrollTop document.documentElement.scrollTop; } else if (document.body) { scrollTop d…

如何处理Java注释

Java 8的很酷的新功能之一就是对lambda表达式的支持。 Lambda表达式在很大程度上依赖于FunctionalInterface 注释 。 在本文中&#xff0c;我们将介绍注释以及如何处理它们&#xff0c;以便您可以实现自己的出色功能。 注解 Java 5中添加了注释 。Java语言附带了一些预定义的…