begin process at 2012 02 10 18:26:58
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Swing

 > JTABBEDPANE AVEC CROIX DE FERMETURE ET LOOK A LA SWT (EN SWING)

JTABBEDPANE AVEC CROIX DE FERMETURE ET LOOK A LA SWT (EN SWING)


 Information sur la source

Note :
7,6 / 10 - par 5 personnes
7,60 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Swing Classé sous :jtabbedpane, fermeture, croix, swt, swing Niveau :Initié Date de création :01/06/2005 Vu / téléchargé :11 944 / 2 451

Auteur : mep

Ecrire un message privé
Site perso
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
En faisant divers programmes j'ai été amené a réaliser une sorte de clone des onglets SWT en SWING. Ils possede les memes graphismes et une croix de fermeture (si on le veux, tout est parametrable, même la couleur des onglets). Je vous en fait profiter car j'ai vu beaucoup de monde cherchant des onglets avec croix de fermeture.



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip PETIT JEU D'ECHEC EN RESEAU (SERVEUR MULTI-PARTIE)
Source avec Zip IMPRESSION D'UN JPANEL (SANS COUPURE DES COMPOSANTS EN BAS D...

 Sources de la même categorie

Source avec Zip Source avec une capture MENU CIRCULAIRE EN SWING par Julien39
Source avec Zip Source avec une capture BANNIÈRE EN SWING : TEXTE DÉFILANT SUR UN JLABEL par Julien39
Source avec Zip Source avec une capture INDICATEUR D'ACTIVITÉ ANIMÉ par Julien39
Source avec Zip Source avec une capture JGRAPH : COMPOSANTS SWING CUSTOMISÉS par Julien39
Source avec Zip Source avec une capture JTABLE CUSTOMISÉE par Julien39

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture MENU CIRCULAIRE EN SWING par Julien39
Source avec Zip Source avec une capture JTABBEDPANE FERMABLE AVEC GESTION DU DRAG AND DROP par indiana_jules
Source avec Zip MANIPULATION D'IMAGES AVEC SWING ET AWT par jscoy
Source avec Zip Source avec une capture LOOK AND FEEL + JTABBEDPANE par larsson
Source avec Zip Source avec une capture APPLICATION D'UN JTABBEDPANE POUR LE CALCUL DES GAINS POUR L... par gmi19oj19

Commentaires et avis

Commentaire de desastreux le 31/07/2005 17:16:00

Bonjour Mep, salut à tous !

J'ai récupéré tes sources pour les accomoder à un projet personnel de freeware opensource et je te remercie pour ta gentillesse de les avoir mises à notre dispositions : J'ai en effet ainsi enfin bien pu comprendre comment faire l'implémentation d'un Look & Feel.

Trois petits bémols cependant :

***********************************************************************************************

1_ Une série interminable d'exceptions se produit si l'on essaye de supprimer TOUS les onglets d'un même MTabbedPane et le dernier onglet n'est alors bien sûr pas supprimé.
Cela dit, ce n'est rien du tout puisqu'il suffit pour corriger cela de rajouter :

if ( selectedIndex < 0 ) return;

... Au tout début des procédures de la class ThemeUI, intitulées : "void paintContentBorder" et "void paintContentBorderTopEdge".

**********************************************************************************************

2_ En revanche, je n'arrive pas à régler le problème suivant qui revêt une grande importance pour moi : J'ai fait en sorte que la couleur de fond d'un onglet non-selectionné soit celle du texte de l'onglet sélectionné et vice-versa... ( Par exemple : Fond bleu/Texte vert pour la séléction, et Fond Vert/Texte Bleu pour les onglets non séléctionnés. )
J'ai donc du rajouté quelques lignes dans la class ecouteurDeMouse pour que les changements prennent effets à chaque clic de séléction, puisque le code est prévu à l'origine pour que seule la couleur de fond de l'onglet change :

              for (int i = 0; i < getTabCount(); i++)
              {
                if ( i != tabNumber) { setForegroundAt(i, selectedColor); }
                else { setForegroundAt(i, noneSelectedColor); }
              }
//( Il faut rajouter pour cela à la CLass MTabbedPane la propriété "noneSelectedColor" et //l'instancier de la même manière que celle déjà existante : "selectedColor" )
Le problème, c'est que si ça marche pour un clic, ça ne marche pas du tout lors de la suppression d'un onglet. En effet, selon l'emplacement de l'onglet présélectionné et celui de l'onglet que l'on vient de fermer ( Emplacements qui peuvent être différent puisque la fermeture d'un onglet n'exige pas sa présélection ) l'index de séléction d'onglet change de façon indésirable ! ( Par exemple: Dès le départ de l'éxécution du programme, la fermeture du premier onglet -Index Zéro présélectionné par défaut- va entrainer la séléction de l'ancien Index n°2 devenu l'Index n°1; étrange ? En faisant quelques essais, je me suis aperçu que pour ainsi dire toutes les fermetures d'onglets donnaient un résultat différent, mais presque toujours indésirable !  Comment cela se fait-il !? Je n'en sais rien...
Le pire est que malgré l'utilisation de la fonction setSelectedIndex(), placée juste après le remove() ( Ou removeTabAt() mais cela ne semble rien changer... ) je n'arrive à rien !

Voici exactement ce que j'ai fait jusqu'à maintenant pour essayer d'endiguer le problème, mais cela ne résouds que la moitié des mauvaises post-séléctions, et est de toute façon trop indigeste pour que je continue dans cette voix :

             if (listenerList.getListenerCount() == 0)
              {//Fermeture d'un onglet: Adaptation des couleurs back/fore des onglets restants
                int newSelIndx = getSelectedIndex(); // index du nouvel onglet à séléctionner
                if ( getSelectedIndex() == tabNumber )
                { // Si la séléction en cours est justement l'onglet qu'on efface :
                  if (getTabCount() > 1)
                  { // Dans le cas où il y a plus d'un seul onglet :
                    if ( tabNumber == 0 ) { newSelIndx = -1; } // -1 marche, mais pourquoi ?
                    else if ( tabNumber == getTabCount()-1 ) { newSelIndx = getTabCount()-2; }
                    else { newSelIndx = tabNumber; }
                  }
                }
                else if ( tabNumber < getSelectedIndex() )
                { // Les lignes ci-dessous ne résolvent pas tous les cas (???)            
                  if ( tabNumber == 0 ) { newSelIndx = -1; }
                  else if ( tabNumber == getTabCount()-1 ) { newSelIndx = getTabCount()-2; }
                  else { newSelIndx = getSelectedIndex()-1;  }
                }              
                else
                {// ICI : GROS PROBLEMES !!! Rien ne marche...
                  newSelIndx = getSelectedIndex();
                }
              
                removeTabAt(tabNumber);          // Ici, on efface l'onglet !      
                setSelectedIndex(newSelIndx);    // Ici, on choisit le new onglet selectionné
              
                if ( newSelIndx == -1 ) newSelIndx = 0;
                for (int i = 0; i < getTabCount(); i++)
                {
                    if (i != newSelIndx) { setForegroundAt(i, selectedColor); }
                    else { setForegroundAt(i, noneSelectedColor); }
                }
              }
// Vous pouvez vérifier, ça résouds une bonne partie des relocations de la séléction,
// Pour le problème des couleurs, je pense pouvoir trouver une alternative en regardant mieux // comment la bascule selectionné/non séléctionné est faite pour la couleur de fond, mais en ce // qui concerne les BUGs de séléction-post-remove,là, je suis vraiment bloqué...

**********************************************************************************************

3_ Accessoirement, j'ai remarqué, en cherchant à comprendre l'utilité de tes class "CloseTabEvent" et "CloseTabListener", dans le cadre d'une séance de débug relative au point abordé ci-dessus, que lors de la fermeture d'un onglet, elles ne semblent pas intervenir le moins du monde : De plus, si j'élimine leur appel dans la Class de l'objet principal (MTabbedPane), cela ne semble rien changer du tout lors de l'éxécution du programme...
Superflu, inachevé ou bien manque d'observation de ma part ?

**********************************************************************************************

Je vais probablement continuer à chercher un peu, mais si quelqu'un a une idée, ou si l'auteur avait une version mise-à-jour à mettre sur le site et qui corrige ces erreurs bizzaroïdes, je suis humblement preneur : Merci !  

Commentaire de alain57 le 13/10/2005 14:45:13

je suis preneur aussi
c'est deja un tres bon début, mais comme tu le souligne ya des ptites erreurs et c'est incomplet
Mais ca a le merite d'etre clair et bien fait :)

Commentaire de bullgr82 le 06/12/2005 16:03:00

Salut,

tout d'abord merci pour ton code.

Ensuite, j'ai un petit souci avec tes onglets.

Lorsque je mets le titre de l'onglet à jour avec un titre plus long, la croix ne se décalle pas et apparaît donc en plein milieu du texte.
Comment puis-je régler ce petit détail ?

Commentaire de badger71 le 17/01/2006 09:52:43

Bonjour,

J'ai regardé de près ta source, m'en suis servi sans problème, ai même pu la modifier pour voir son comportement, tout va bien.

Mais, car il y en a un :p, pourquoi réinventer la roue ?
En effet, le "L&F" d'Eclipse étant ecrit en SWT, pourquoi utiliser SWING ?
Je ne vois qu'un seul argument, le manque de portabilité de SWT (un fichier jar par système d'exploitation est nécessaire). Sinon, tu te complique la vie pour rien :p

Pour résumer, bonne source, mais utilité peu convainquante pour moi :)

Continue a coder quand meme hein ^_^

Commentaire de misterzinzin le 07/10/2006 15:22:36

mignon :-) ... ca donne tout de suite du look aux onglets :-)

Commentaire de guigui37600 le 27/02/2007 03:33:04

nikel comme classe !!  dommage qu'il y a pas une mise à jours avec les remarques de desastreux ....
Merci toutes fois ca ma bien aidé pour faire la mienne

Commentaire de sisisousou le 16/02/2011 18:51:29

beau travaille !!!
mais un petit problème si en utilise un LAF Quaqua ^par exemple il y'a une grave erreur lors de mouse entred et mouse exited en+ le croit apparaît en dehors de la tabbedpane !!! une solution ?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

JTabbedPane: fermeture d'un onglet [ par sebdemon ] Boujour à tous,J'utilise un objet JTabbedPane pour générer des onglets. Je souhaiterais pouvoir fermer un onglet précis en cliquant sur une croix (gen Swing, AWT, SWT , la quelle est meilleure ???? [ par hmidaissam ] salut tout le monde mon mini-projet consiste &#224; faire un utilitaire de SNMP avec Java ; mais je veux savoir concernant l'interface graphique que SWING : JTabbedPane et addChangeListener [ par guiguimac ] bonjour,j'ai un objet de JTabbedPane et quand je change d'onglet séléctionné grace à la souris, j'aimerai bien savoir lequel a été cliqué.qq'un se se SWING : JTabbedPane [ par bibi_4000 ] Comment puis-je faire un ensemble de vérification sur la valeur des champs appartenant à un onglet ? Cette vérification doit être faite juste avent ch [SWING][JTABBEDPANE] [ par Xenutia ] Bonjour,J'ai un JTabbedPane avec 3 onglets et je voudrais qu'à l'ouverture du prgramme, on ne puisse accéder qu'au prmier onglet, les 2 autres étant g AWT,Swing,SWT ??? [ par moi4975 ] Bonsoir à tous,je débute en java et j'aimerais connaitre plus en détails les différences entre les composants graphiques AWT,SWING,SWT.Les points posi Gestion fermeture JFrame par la croix [ par siciliano99 ] Bonjour a tous voila mon problème je dois réalisé un chat en java et donc géré les flux de données..... mon problème est le suivant lorsque je ferme croix de fermeture des JDialog [ par guillaume21 ] Je voudrais savoir comment enlever la croix de fermeture en haute à droite des JDialog.merciguillaume Applet JAVA et swing [ par mous33 ] je n'arrive pas a utiliser les class du package javax.swing.* dans mes applet je les compile bien sans erreur mais a l'utilisation de IE il ne trouve JTabbedPane [ par cosmos38240 ] Bonjour,J'ai créé un JTabbedPane qui marche presque bien.EN fait au lancement toutes les vues des tous mes onglets s'affichent.Si je clike apres sur l


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,106 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales