Widgety niestandardowe

Można rozszerzyć bibliotekę SWT, implementując własny, niestandardowy widget. Same biblioteki SWT udostępniają pakiet org.eclipse.swt.custom, który zawiera niestandardowe elementy sterujące. Pól tych nie ma w podstawowym zbiorze elementów sterujących SWT, ale są one potrzebne do implementacji środowiska roboczego platformy.

Element sterujący
Przeznaczenie
CBanner Element sterujący CBanner jest używane w środowisku roboczym do definiowania układu obszaru paska narzędzi i paska narzędzi przełączania perspektywy.
CCombo Element sterujący podobny do elementu Combo, ale umożliwiający zmianę rozmiaru w pionie tak, aby dopasować się do rozmiaru komórek w tabeli.
CLabel Element sterujący podobny do elementu Label, ale obsługujący obcinanie tekstu i zastępowanie teksu wielokropkiem. Obsługuje także efekt gradientu dla koloru tła, taki jak używany w aktywnym widoku środowiska roboczego. Nie obsługuje zawijania tekstu.
CTabFolder Element sterujący podobny do elementu TabFolder, ale z możliwością dodatkowej konfiguracji wyglądu kart (u góry lub u dołu) i ramek.
CTabItem Obiekt interfejsu użytkownika z możliwością zaznaczania odpowiadający karcie strony w polu CTabFolder.
SashForm Złożony element sterujący, który umożliwia układanie jego elementów podrzędnych w wierszu lub w kolumnie i oddziela je przy użyciu elementu sterującego Sash, dzięki czemu użytkownik może zmieniać ich rozmiar.
ScrolledComposite Złożony element sterujący, który umożliwia przewijanie jego treści i opcjonalnie rozciąga ją w celu wypełnienia dostępnego miejsca.
StyledText Element sterujący z możliwością edycji, który służy do wpisywania tekstu. Poszczególne fragmenty tekstu wewnątrz elementu sterującego mogą mieć różne kolory i różne style czcionki.
ViewForm Element sterujący ViewForm jest używany w środowisku roboczym do ustawienia pozycji oraz wielkości etykiety, paska narzędzi lub lokalnego paska menu widoku.

Implementowanie niestandardowego widgetu

Gdy wiadomo już na pewno, że potrzebny jest niestandardowy widget oraz znane są platformy, które mają być obsługiwane, można rozważyć kilka technik implementacji tego widgetu. Techniki te można stosować łącznie i dopasowywać odpowiednio do dostępnych możliwości bazowej platformy systemu operacyjnego.

Implementacja rodzima

Gdy dana aplikacja wymaga rodzimego widgetu, który nie jest udostępniany przez biblioteki SWT, trzeba go zaimplementować w trybie rodzimym. Może to być widget platformy, widget innej firmy, lub dowolny inny widget we współużytkowanej bibliotece platformy. Pełny przykład rodzimej implementacji widgetu niestandardowego można znaleźć w sekcji Creating Your Own Widgets using SWT (Tworzenie własnych widgetów przy użyciu biblioteki SWT).

Łączenie istniejących widgetów

Widgety mogą być łączone, tworząc bardziej zaawansowanych widgety. Na przykład element sterujący Combo można zaimplementować przy użyciu widgetu wprowadzania tekstu w połączeniu z przyciskiem i listą rozwijaną. Aby zaimplementować widget złożony, należy utworzyć podklasę klasy Composite i zarządzać elementami potomnymi wewnętrznie.

Prosty przykład można znaleźć w opisie widgetu CCombo.

Implementacja rysowana niestandardowo

W niektórych przypadkach nie ma żadnego kodu rodzimego ani istniejących widgetów, które mogłyby pomóc w implementacji nowego widgetu. Oznacza to, że należy narysować widget samodzielnie w procedurze obsługi zdarzenia Paint. Chociaż technika ta może być mocno skomplikowana, jej zaletą jest tworzenie całkowicie przenośnej implementacji.

Rysowane niestandardowo elementy sterujące są implementowane przez utworzenie podklas klasy Canvas lub klasy Composite. Jeśli dany widget nie ma mieć potomnych elementów sterujących, należy utworzyć podklasy klasy Canvas.

Wewnętrzna implementacja rysowanego niestandardowo widgetu obejmuje zwykle trzy główne czynności:

Metoda ta jest stosowana dla wielu widgetów z pakietu org.eclipse.swt.custom. Prosty przykład można znaleźć w opisie widgetu CLabel.

Więcej informacji na temat widgetów niestandardowych można znaleźć w sekcji Tworzenie własnych widgetów przy użyciu biblioteki SWT.