Java >> Tutoriel Java >  >> Java

Apparence et convivialité SWT :personnalisez la couleur de la barre de défilement plate et bien plus encore

Récemment, j'ai introduit un contrôle de curseur personnalisé utile pour améliorer l'apparence SWT des dispositions de vue plus subtiles. Heureusement, il semble que le widget ait déjà trouvé des utilisateurs précoces en dehors du monde de Code Affine. Ce qui a conduit à quelques améliorations qui seront présentées dans les sections suivantes.








Apparence SWT des barres de défilement

« SWT est une fine couche d'abstraction au-dessus des widgets natifs du système d'exploitation. C'est une très bonne chose si vous avez l'intention que vos applications s'intègrent bien à l'apparence du système d'exploitation. Mais en contrepartie, cette approche limite considérablement les capacités de style » (pour me citer de Sacrilege, …)

En particulier, je perçois les barres de défilement SWT natives souvent comme perturbatrices. Mais faisant partie des contrôles natifs, leur apparence SWT n'est pas personnalisable du tout. Par conséquent, j'ai créé un widget de curseur SWT personnalisé appelé FlatScrollBar .

Comme il n'est pas non plus possible de remplacer la barre de défilement SWT native des contrôles comme les arbres ou les tables, j'ai introduit un ScrollableAdapter qui contourne ces limitations avec des superpositions. Jusqu'à présent, j'ai des adaptateurs pour les arbres et les tables disponibles et un prototype pour ScrolledComposite comme travail en cours.

Couleur …

En matière de style, les couleurs sont très importantes. Il n'est donc pas surprenant que la première demande d'amélioration concernait la possibilité de changer les couleurs des différents éléments du curseur. Pour cette raison, j'ai introduit les trois propriétés incrementColor , pageIncrementColor et thumbColor pour permettre les ajustements appropriés :

L'extrait suivant…

FlatScrollBarTable table = [...]
table.setPageIncrementColor( getColor( SWT.COLOR_INFO_BACKGROUND ) );
table.setThumbColor( getColor( SWT.COLOR_WIDGET_LIGHT_SHADOW ) );

… rend les barres de défilement comme ceci (getColor récupère la couleur système de l'affichage courant) :

Comme les barres de défilement natives sur Mac OS semblent acceptables prêtes à l'emploi, l'adaptateur s'abstient de superpositions personnalisées sur cette plate-forme. Seules les plates-formes Gtk et MS Windows sont concernées. Cependant, le contrôle FlatScrollBar lui-même fonctionne également bien sur OS X.

… et plus

Le lecteur attentif pourrait se demander à quoi sert l'incrémentColor car l'image ne montre que trois éléments de curseur. Il est possible d'afficher les boutons d'incrémentation à l'aide de incrementButtonLength :

FlatScrollBarTable table = [...]
table.setIncrementButtonLength( 7 );
table.setIncrementColor( getColor( SWT.COLOR_WIDGET_DARK_SHADOW ) );
[...]

Sympa, n'est-ce pas ?

La dernière amélioration n'est pas liée au style mais néanmoins remarquable. Il ajoute la gestion des événements non typés au FlatScrollBar . Donc, si vous utilisez Java 8, l'observation de la sélection de la barre de défilement peut être gérée comme indiqué ici :

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

Conclusion

Utilisation du FlatScrollBar et le ScrollableAdapter dans l'un de nos projets semble prometteur jusqu'à présent. Je suis curieux de voir à quel point cette approche sera durable et s'il est possible de s'adapter également aux contrôles de texte et/ou de texte stylé. Les contrôles font partie de com.codeaffine.eclipse.swt fonctionnalité du dépôt Xiliary P2 :http://fappel.github.io/xiliary

Si vous souhaitez consulter le code ou signaler un problème, vous pouvez également consulter le projet Xiliary GitHub. Recherchez FlatScrollbarDemo , FlatScrollBarTreeDemo et FlatScrollBarTableDemo pour des exemples d'utilisation :https://github.com/fappel/xiliary

Balise Java