IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Problème étiquette JTabbedPane


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut Problème étiquette JTabbedPane
    Bonjours,

    Alors je suis en train de programmer un jTabbedPane avec des onglets qui possèdent une croix pour fermer.

    Pour cela, j’ai écris une classe JtabX qui est en fait un JPanel avec :
    - 1 icône (sous forme de JLabel)
    - 1 label (sous forme de Jlabel)
    - 1 bouton (sous forme de Jbutton)

    Lorsque j’ajoute un élément dans ma classe JtabbedPaneX, je lui ajoute l’étiquette associée.

    Enfin, mes contenus possèdent un attribut qui n’est autre que leur onglet.



    Tout fonctionnait bien, jusqu’au moment ou je tente de changer la couleur de font. En effet, je souhaiterais changer l’étiquette (ou plutôt la mettre à jour) lorsque quelque chose évolue dans mon contenu (éditeur de texte ou autre).
    Jusque la, je changeais le nom de l’onglet (par exemple lorsque l’on enregistre, c’est le nom du fichier qui remplace le nom de l’onglet ; ou autre exemple, l’ajout d’une étoile lorsque l’on a besoin d’enregistrer).

    Mon premier échec est arrivé lorsque j’ai tenté de mettre à jour le JtoolTipText, ou cela ne marchait pas.
    A présent, c’est la couleur de font que je ne peux modifier.

    Si quelqu’un comprend ce qu’il se passe, je vous pris de bien vouloir m’éclairer.


    L’astuce utilisé (mais qui ne me convient pas du tout) était de modifier le JtoolTipText du bouton fermer. Mais un bouton fermer est plus utile avec le texte « Fermer onglet » et pas « D:/pr … r/toto.txt ».

    Alors je vous passe quelque extrait de code :
    Classe JtabX :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    package modules.base.JTabbedPaneX;
     
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Insets;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
     
    import javax.swing.AbstractButton;
    import javax.swing.BorderFactory;
    import javax.swing.Icon;
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class JTabX extends JPanel{
     
     
    	private static final long serialVersionUID = 1L;
     
    	JLabel m_icone = null;
    	JLabel m_titre = null;
    	JButton m_bouton = null;
     
        public JTabX(String p_titre) {
            super(new FlowLayout(FlowLayout.LEFT, 0, 0));
            //setOpaque(false);
     
            m_icone = new JLabel();
     
        	m_titre = new JLabel(p_titre);
            m_titre.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
            add(m_titre);
     
        	m_bouton = new JButton("X");
        	m_bouton.setPreferredSize(new Dimension(20,20));
        	m_bouton.setMargin(new Insets(0,0,0,0));
        	m_bouton.addMouseListener(new MouseListener());
        	m_bouton.setEnabled(false);
            add(m_bouton);
     
            setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
        }
     
        public JTabX(String p_titre, Icon p_icon) {
            super(new FlowLayout(FlowLayout.LEFT, 0, 0));
            setOpaque(false);
     
        	m_icone = new JLabel(p_icon);
            add(m_icone);
     
        	m_titre = new JLabel(p_titre);
            m_titre.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
            add(m_titre);
     
        	m_bouton = new JButton("X");
        	m_bouton.setPreferredSize(new Dimension(20,20));
        	m_bouton.setMargin(new Insets(0,0,0,0));
        	m_bouton.addMouseListener(new MouseListener());
        	m_bouton.setEnabled(false);
            add(m_bouton);
     
            setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
        }
     
        public JTabX(String p_titre, Icon p_icon, Icon p_croix) {
            super(new FlowLayout(FlowLayout.LEFT, 0, 0));
            setOpaque(false);
     
        	m_icone = new JLabel(p_icon);
            add(m_icone);
     
        	m_titre = new JLabel(p_titre);
            m_titre.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
            add(m_titre);
     
        	m_bouton = new JButton(p_croix);
        	m_bouton.setToolTipText("fermer onglet");
        	m_bouton.setPreferredSize(new Dimension(p_croix.getIconHeight(),p_croix.getIconWidth()));
        	m_bouton.addMouseListener(new MouseListener());
        	m_bouton.setEnabled(false);
            add(m_bouton);
     
            setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0));
        }
     
     
     
     
    	public Icon getIcone(){
    		return m_icone.getIcon();
    	}
     
    	public void setIcone(Icon p_icon){
    		m_icone.setIcon(p_icon);
    	}
     
    	public String getTitre(){
    		return m_titre.getText();
    	}
     
    	public void setTitre(String p_titre){
    		m_titre.setText(p_titre);
    	}
     
    	public JButton getBouton(){
    		return m_bouton;
    	}
     
    	public void setBouton(JButton p_button){
    		m_bouton = p_button;
    	}
     
    	public void setCouleurFont(Color p_couleur)
    	{
    		m_titre.setText(p_couleur.toString()); // Astuce, je sais que la couleur change
    	}
     
    	public void setToolTipText(String p_text)
    	{
    		m_bouton.setToolTipText(p_text);       // Astuce, je sais que le texte du toolTip change
    	}
     
     
     
     
        public void addActionListener(ActionListener p_action){
        	m_bouton.addActionListener(p_action);
        }
     
    	public void removeActionListener(ActionListener p_action){
    		m_bouton.removeActionListener(p_action);
    	}
     
        class MouseListener extends MouseAdapter {
            public void mouseEntered(MouseEvent e) {
                Component component = e.getComponent();
                if (component instanceof AbstractButton) {
                    AbstractButton button = (AbstractButton) component;
                    button.setEnabled(true);
                }
            }
     
            public void mouseExited(MouseEvent e) {
                Component component = e.getComponent();
                if (component instanceof AbstractButton) {
                    AbstractButton button = (AbstractButton) component;
                    button.setEnabled(false);
                }
            }
        };
    }

    Classe JtabbedPaneX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    package modules.base.JTabbedPaneX;
     
     
    import java.awt.Component;
    import java.awt.event.ActionListener;
     
    import javax.swing.Icon;
    import javax.swing.JTabbedPane;
     
     
     
    public class JTabbedPaneX extends JTabbedPane  {
     
        /**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	ActionListener m_action;
     
    	public JTabbedPaneX() {
    		super();
    		m_action = null;
    	}
     
    	public JTabbedPaneX(int arg0) {
    		super(arg0);
    		m_action = null;
    	}
     
    	public JTabbedPaneX(int arg0, int arg1) {
    		super(arg0, arg1);
    		m_action = null;
    	}
     
    	public void addTabX(JTabX arg0, Component arg1)
    	{
    		addTab("", arg1);
    		setSelectedComponent(arg1);
    		setTabComponentAt(getSelectedIndex(), arg0);
    		if(m_action != null) arg0.addActionListener(m_action);
    	}
     
    	public void addTabX(String arg0, Icon arg1, Component arg2)
    	{
    		addTab(arg0, arg1, arg2);
    		setSelectedComponent(arg2);
    		JTabX l_tab = new JTabX(arg0, arg1);
    		setTabComponentAt(getSelectedIndex(), l_tab);
    		if(m_action != null) l_tab.addActionListener(m_action);
    	}
     
    	public void addTabX(String arg0, Icon arg1, Icon arg2, Component arg3)
    	{
    		addTab(arg0, arg1, arg3);
    		setSelectedComponent(arg3);
    		JTabX l_tab = new JTabX(arg0, arg1, arg2);
    		setTabComponentAt(getSelectedIndex(), l_tab);
    		if(m_action != null) l_tab.addActionListener(m_action);
    	}
     
    	public void addActionListener(ActionListener p_action){
    		m_action = p_action;
    		for(int l_i=0; l_i<getTabCount(); l_i++) ((JTabX)getTabComponentAt(l_i)).addActionListener(p_action);
    	}
     
    	public void removeActionListener(){
    		for(int l_i=0; l_i<getTabCount(); l_i++) ((JTabX)getTabComponentAt(l_i)).removeActionListener(m_action);
    		m_action = null;
    	}
     
    	public int getIndexBouton(Object p_bouton){
    		int l_j = -1;
    		for(int l_i=0; l_i<getTabCount(); l_i++)
    			if(((JTabX)getTabComponentAt(l_i)).getBouton().equals(p_bouton)) l_j = l_i;
     
    		return l_j;
    	}
    }

    Classe Module Base (qui est étendu en différent objet) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    package modules.base;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.io.File;
    import java.io.Serializable;
     
    import javax.swing.ImageIcon;
    import javax.swing.JFileChooser;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
     
    import modules.VisionneurGantt.VisionneurGantt;
    import modules.base.JTabbedPaneX.JTabX;
    import modules.editeurTexte.EditeurTexte;
     
     
     
    public class ModuleBase extends JPanel implements /*Runnable,*/ Serializable{
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	public static final int s_type = 0;
    	public static final String s_ext = "p0";
     
    	protected JTabX m_etiquette;
     
    	protected File m_fichier;
    	protected String m_nomOnglet;
    	protected String m_texteToolTip;
    	protected long m_dateModification;
     
    	boolean m_modifierExterne;
    	boolean m_modifierInterne;
    	boolean m_errone;
    	boolean m_selectionne;
     
    	protected Thread m_timerModification;
     
     
    	public ModuleBase() {
    		m_fichier = new File("");
    		m_nomOnglet = "";
    		m_texteToolTip = "";
     
    		m_dateModification = 0;
    		m_modifierExterne = false;
    		m_modifierInterne = false;
    		m_errone = false;
    		m_selectionne = false;
     
    		try{
    			m_etiquette = new JTabX(m_nomOnglet, null, new ImageIcon(this.getClass().getResource("/resources/images/iconeFermer.gif")));
    		}catch (Exception e) { m_etiquette = new JTabX(""); }
     
    		setLayout(new BorderLayout());
    		this.setBackground(Color.red);
    	}
     
    	public ModuleBase(String p_nomOnglet) {
    		m_fichier = new File("");
    		m_nomOnglet = p_nomOnglet;
    		m_texteToolTip = "";
     
    		m_dateModification = 0;
    		m_modifierExterne = false;
    		m_modifierInterne = false;
    		m_errone = false;
    		m_selectionne = false;
    		try{
    			m_etiquette = new JTabX(m_nomOnglet, null, new ImageIcon(this.getClass().getResource("/resources/images/iconeFermer.gif")));
    		}catch (Exception e) { m_etiquette = new JTabX(""); }
     
    		setLayout(new BorderLayout());
    		this.setBackground(Color.red);
    	}
     
    	public void initialiserInterface(){
    		setLayout(new BorderLayout());
    		this.setBackground(Color.red);
     
     
    	public void reactualiserEtiquette()
    	{
    		try {
    			if(isErrone()) m_etiquette.setIcone(getIconeErreur());
    			else m_etiquette.setIcone(getIcone());
    		}catch (Exception e) { e.printStackTrace(); };
     
    		if(isModifierInterne()) m_etiquette.setTitre("*" + m_nomOnglet);
    		else m_etiquette.setTitre(m_nomOnglet);
     
    		m_etiquette.setToolTipText(m_texteToolTip);
     
    		if(isModifierExterne()) m_etiquette.setCouleurFont(Color.ORANGE);
    		else m_etiquette.setCouleurFont(Color.GREEN);
     
    		m_etiquette.setVisible(false);
    		m_etiquette.setVisible(true);
    	}
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    	}
    }
    Classe Gestionnaire Fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    	public void nouveauFichier(int p_type){
     
    		ModuleBase l_onglet;
     
    		switch(p_type){
    			case Accueil.s_type :
    				l_onglet = new Accueil("Bienvenue");
    				((Accueil)l_onglet).addActionListenerQuickOpen(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { ouvrirFichier(); }});
    				((Accueil)l_onglet).addActionListenerQuickEdit(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { nouveauFichier(EditeurTexte.s_type); }});
    				break;
    			case EditeurTexte.s_type :
    				l_onglet = new EditeurTexte("Editeur Texte " + m_compteurInterne);
    				break;
    			case EditeurGraphique.s_type :
    				l_onglet = new EditeurGraphique("Editeur Graphique " + m_compteurInterne);
    				break;
    			case VisionneurGantt.s_type :
    				l_onglet = new VisionneurGantt("Visionneur Gantt " + m_compteurInterne);
    				break;
    			case VisionneurCarte.s_type :
    				l_onglet = new VisionneurCarte("Visionneur Carte" + m_compteurInterne);
    				//((VisionneurCarte)l_onglet).getMapBean().addPaintListener(new PaintListener(){ public void listenerPaint(Graphics arg0) { reactualiserInterface(); }});
    				break;
    			default :
    				l_onglet = new ModuleBase("error " + m_compteurInterne);
    				break;
    		}
     
    		m_jTabbedPane.addTabX(l_onglet.getEtiquette(), l_onglet);
    		m_compteurInterne++;
     
    	}
    Merci d’avance.

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut
    Alors, personne ne voit le problème ?!!

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut
    J'ai beau tourner le problème dans tous les sens, le phénomène persiste ne peux pas modifier les info du JPanel, et ni des JLabel qui constitue l'étiquette.

    Seul des changements d'icone et de texte des JLabel marche.

  4. #4
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Tu ne peux pas = quand tu le fais, tu as une exception ? ça ne fait rien ? si tu réduit la fenêtre et la réaffiche c'est toujours pareil ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut
    Alors j'ai modifié mon code qui doit changer la couleur et voici le resultat :



    J'ai ouvert 2 fois le même fichier, et quant j'en modifie un, l'autre doit le voir et fait appelle a la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public void setCouleurFont(Color p_couleur)
    	{
    		setBackground(p_couleur); // Astuce, je sais que la couleur ne change pas
    		m_titre.setBackground(p_couleur); // Astuce, je sais que la couleur ne change pas
    		m_bouton.setBackground(p_couleur); // Astuce, je sais que la couleur change
    	}
    J'ai rajouté des ligne et tout doit devenir normalement orange. Mais comme on le vois sur l'image, seul le bouton est réactif (arriere qui est devenu orange).
    Aucune exeption n'est levé.

    édit : et j'ai beau tenté de faire réafficher la fenêtre, il ne veux pas le mettre orange (enfin juste l'arrière du bouton)
    edit2 :probleme sur l'image !!! je met la bonne !!!
    edit 3 : j'ai changé l'image, on voit bien le font du bouton orange et pas le reste.

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut
    il me semblait bien que ce bug était tordu, mais de la a ce que personne ne voit !!!

    DOnc j'informe que ca persiste et signe.
    Je ne sais même plus quoi tenter.

Discussions similaires

  1. [XL-2003] Diagramme de points: problème étiquette
    Par mimilll dans le forum Excel
    Réponses: 1
    Dernier message: 29/10/2009, 20h39
  2. j'ai un problème avec JTabbedPane
    Par minooo dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 19/12/2007, 12h59
  3. problème avec jTabbedpane
    Par wael.dz dans le forum NetBeans
    Réponses: 1
    Dernier message: 17/03/2007, 19h27
  4. Problèmes avec JTabbedPane
    Par Baptiste Wicht dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 06/01/2006, 18h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo