最近,我引入了一个自定义滑块控件 ,该控件可用于改善SWT外观和更细微的视图布局的感觉。 令人高兴的是,该小部件似乎已经在Code Affine世界之外找到了较早的采用者 。 这导致了一些增强 ,这些增强将在以下各节中介绍。
SWT滚动条外观
SWT是本机OS小部件之上的薄抽象层。 如果您打算将应用程序与OS外观很好地集成在一起,那么这是一件非常好的事情。 但是,作为一种折衷,这种方法大大限制了样式设计功能”(引自Sacrilege,…… )
特别是,我认为本地SWT滚动条经常具有破坏性。 但是,作为本地控件的一部分,它们的SWT外观和感觉根本无法自定义 。 因此,我创建了一个名为FlatScrollBar
的自定义SWT滑块小部件。
由于替换树或表之类的控件的本机SWT滚动条也是不可行的,因此我引入了ScrollableAdapter
,它可以解决带有覆盖层的限制。 到目前为止,我正在开发用于树和表的适配器,以及用于ScrolledComposite
的原型。
颜色...
当涉及到样式时,颜色非常重要。 因此,毫不奇怪,第一个增强要求是关于更改各种滑块元素的颜色的能力。 正因为如此,我介绍了三个属性incrementColor,pageIncrementColor和thumbColor允许apropriate调整:
以下代码段…
FlatScrollBarTable table = [...]
table.setPageIncrementColor( getColor( SWT.COLOR_INFO_BACKGROUND ) );
table.setThumbColor( getColor( SWT.COLOR_WIDGET_LIGHT_SHADOW ) );
…像这样渲染滚动条( getColor
从当前显示中检索系统颜色):
由于Mac OS上的本机滚动条看起来是开箱即用的,因此适配器会从该平台上的自定义叠加层中删除。 仅Gtk和MS Windows平台会受到影响。 但是FlatScrollBar控件本身也可以在OS X上很好地工作。
…和更多
细心的读者可能会奇怪,由于图片仅显示了三个滑块元素,所以增量颜色有什么用。 可以使用crementButtonLength显示增量按钮:
FlatScrollBarTable table = [...]
table.setIncrementButtonLength( 7 );
table.setIncrementColor( getColor( SWT.COLOR_WIDGET_DARK_SHADOW ) );
[...]
整洁,不是吗?
最后一个增强功能与样式无关,但是值得注意。 它将无类型的事件处理添加到FlatScrollBar
。 因此,如果您恰巧使用Java 8,则可以按如下所示处理滚动条选择观察:
FlatScrollBar scrollBar = new FlatScrollBar( parent, SWT.HORIZONTAL );
scrollbar.addListener( SWT.Selection, event -> handleEvent() );
结论
到目前为止,在我们的项目之一中使用FlatScrollBar
和ScrollableAdapter
看起来很有希望。 我很好奇这种方法的可持续性,以及是否有可能也适应文本和/或样式化的文本控件。 这些控件是Xiliary P2存储库的com.codeaffine.eclipse.swt功能的一部分: http ://fappel.github.io/xiliary
如果您想看一下代码或提出问题,也可以看一下Xiliary GitHub项目。 查找FlatScrollbarDemo
, FlatScrollBarTreeDemo
和FlatScrollBarTableDemo
以获取用法示例: https : //github.com/fappel/xiliary
翻译自: https://www.javacodegeeks.com/2015/02/swt-look-and-feel-customize-flatscrollbar-color-and-more.html