Sacrilege –自定义SWT滚动条
SWT是本機OS小部件之上的薄抽象層。 如果您打算將應用程序與OS外觀很好地集成在一起,那將是一件非常好的事情。 但是,作為一種折衷方案,這種方法大大限制了樣式功能。
特別是,我感覺到本機SW??T滾動條通常會干擾更精細的視圖布局。 最近遇到此問題,我嘗試了一個自定義SWT滾動條小部件。 這篇文章介紹了結果–一個簡單的滑塊控件,可用作SWT Slider替換或Scrollbar覆蓋。
SWT滾動條
SWT的OS滾動條抽象有兩種表現形式: org.eclipse.swt.widgets.Scrollbar和org.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控件本身的一部分,它們是不可替換的。 從理論上講,可以停用滾動并使用某種自定義滾動復合材料來模擬滾動行為。 但這有幾個缺點。 我嘗試了這種方法,但結果并不令人滿意。
但是,將可滾動控件包裝到覆蓋適配器復合材料中似乎更有希望。 到目前為止,我已經成功地適應了Tree和Table控件。
這就是適配器創建的樣子:
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上很好地工作。
結論
到目前為止,在我們的項目之一中使用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/2014/12/sacrilege-a-custom-swt-scrollbar.html
總結
以上是生活随笔為你收集整理的Sacrilege –自定义SWT滚动条的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是最优投资组合?
- 下一篇: r4风险等级是什么意思?