Статьи

SWT Look and Feel: настройка цвета FlatScrollBar и многое другое

Недавно я представил пользовательский элемент управления ползунком, полезный для улучшения внешнего вида и ощущения более тонких макетов вида. К счастью, кажется, что виджет уже нашел ранних последователей за пределами мира Code Affine. Что привело к некоторым улучшениям, которые будут представлены в следующих разделах.

стиль-полоса прокрутки

SWT Look and Feel of Scrollbars

«SWT — это тонкий слой абстракции поверх родных виджетов ОС. Это очень хорошая вещь, если вы намерены, чтобы ваши приложения хорошо интегрировались с внешним видом ОС. Но в качестве компромисса этот подход значительно ограничивает возможности стилизации »(цитирую себя из Sacrilege,… )

В частности, я воспринимаю родные полосы прокрутки SWT часто как разрушительные. Но будучи частью нативных элементов управления, их внешний вид и поведение SWT вообще не настраиваются . Поэтому я создал собственный виджет слайдера SWT с именем FlatScrollBar .

Поскольку также невозможно заменить встроенную полосу прокрутки SWT элементов управления, таких как деревья или таблицы, я представил ScrollableAdapter который обходит эти ограничения с помощью наложений. Пока что у меня есть адаптеры для дерева и таблиц и прототип для ScrolledComposite в процессе разработки.

Цвет …

Когда дело доходит до стиля, цвета очень важны. Поэтому неудивительно, что первый запрос на усовершенствование касался возможности изменения цвета различных элементов ползунка. Из-за этого я ввел три свойства incrementColor , pageIncrementColor и thumbColor, чтобы разрешить соответствующие корректировки:

Следующий фрагмент…

1
2
3
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.

…и более

Внимательный читатель может поинтересоваться, для чего полезен incrementColor, поскольку на рисунке показаны только три элемента слайдера. Можно отобразить кнопки увеличения, используя incrementButtonLength :

1
2
3
4
FlatScrollBarTable table = [...]
table.setIncrementButtonLength( 7 );
table.setIncrementColor( getColor( SWT.COLOR_WIDGET_DARK_SHADOW ) );
[...]

Приращение кнопки

Аккуратно, не правда ли?

Последнее улучшение не связано со стилем, но, тем не менее, заслуживает внимания. Он добавляет нетипизированную обработку событий в FlatScrollBar . Так что если вы используете Java 8, наблюдение за выбором полосы прокрутки может быть обработано, как показано здесь:

1
2
FlatScrollBar scrollBar = new FlatScrollBar( parent, SWT.HORIZONTAL );
scrollbar.addListener( SWT.Selection, event -> handleEvent() );

Вывод

Использование FlatScrollBar и ScrollableAdapter в одном из наших проектов пока выглядит многообещающе. Мне любопытно посмотреть, насколько устойчивым будет этот подход и возможно ли его адаптировать также к элементам управления текстом и / или стилю текста. Элементы управления являются частью функции com.codeaffine.eclipse.swt репозитория Xiled P2: http://fappel.github.io/xiliary

Если вы хотите взглянуть на код или подать проблему, вы также можете взглянуть на проект Xiled GitHub. Ищите FlatScrollbarDemo , FlatScrollBarTreeDemo и FlatScrollBarTableDemo для примеров использования: https://github.com/fappel/xiliary