3 votes

Comment empêcher le JTabbedPane avec des rangées d'onglets de réorganiser les rangées lorsqu'elles sont sélectionnées ?

J'ai un JTabbedPane en Swing avec plusieurs rangées d'onglets, qui affichent des informations récapitulatives provenant de diverses parties de mon application. J'aimerais que l'utilisateur puisse double-cliquer sur n'importe quel onglet pour en afficher le contenu complet dans une fenêtre, mais les rangées d'onglets sont déplacées lorsque le premier clic est détecté sur un onglet situé ailleurs que dans la première rangée. Le deuxième clic est détecté comme un double-clic, mais un autre onglet se trouve maintenant sous le curseur (en raison du déplacement de la rangée d'onglets d'origine vers l'avant), et la mauvaise fenêtre s'affiche.

Comment puis-je empêcher les rangées d'onglets de se réorganiser, ou comment puis-je permettre à l'utilisateur de visualiser facilement les données associées lorsqu'il clique sur un onglet donné ?

Edit : tentative de clarification : le mouvement des rangées, plutôt que le mouvement des onglets dans les rangées.

0voto

oldingn Points 86

Je m'excuse de répondre à ma propre question, mais la solution simple à mon problème consiste à capturer l'indice de l'onglet lors du premier clic dans mon MouseAdapter, et à effectuer le double-clic en utilisant la valeur capturée, plutôt que tabPane.getSelectedIndex() qui est en cours lorsque le deuxième clic est détecté :

if (evt.getClickCount() == 1 && evt.getComponent() == tabPane) {
    currentTabIndex = tabPane.getSelectedIndex();
}
else if (evt.getClickCount() == 2 && evt.getComponent() == tabPane) {
    setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                //double-clicked a tab
... {snip}
}

Cela n'empêche pas les rangées d'onglets d'être déplacées, mais l'onglet cliqué en premier est sélectionné pour l'affichage, comme l'utilisateur s'y attend.

De même, il est sans doute préférable de disposer d'un contrôle cliquable distinct permettant à l'utilisateur de demander l'affichage complet du contenu d'un onglet, plutôt que de procéder par double-clic, comme l'a suggéré Camickr (merci !).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X