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

  1. #1
    Membre régulier
    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
    Points : 121
    Points
    121
    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 régulier
    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
    Points : 121
    Points
    121
    Par défaut
    Alors, personne ne voit le problème ?!!

  3. #3
    Membre régulier
    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
    Points : 121
    Points
    121
    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 chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    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 régulier
    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
    Points : 121
    Points
    121
    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 régulier
    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
    Points : 121
    Points
    121
    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.

  7. #7
    Membre du Club Avatar de Liquidsoul
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 51
    Points : 65
    Points
    65
    Par défaut
    Salut,

    Je ne comprend pas totalement ton problème, mais apparement tu cherches à modifier la couleur de fond de ton onglet et à avoir un toolTipText pour ce meme onglet (corrige moi si je me trompe).
    As-tu essayer d'opérer directement sur le TabComponent (avec la fonction getTabComponent) pour modifier la couleur de fond?
    Pour le tooltiptext tu peux en attribuer un au Tab via la fonction "setToolTipTextAt" de ton JTabbedPane.

    J'espère avoir pu te donner d'autres pistes comme ca... sinon bon courage

  8. #8
    Membre régulier
    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
    Points : 121
    Points
    121
    Par défaut
    C'est effectivement ce qui est fait.

    Je change le tab. Le soucis est que je peux changer le texte du tab, mais la couleur de font et tooltiptext impossible.

  9. #9
    Membre du Club Avatar de Liquidsoul
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 51
    Points : 65
    Points
    65
    Par défaut
    Pour le toolTipText il faut que tu passes par la fonction de JTabbedPane : "setToolTipTextAt".
    Pour la couleur, j'ai fait un test rapide en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JTabbedPane pane = ...
    pane.getComponentAt( 0 ).setBackground( Color.red );
    Enfin, si je ne me trompe pas, j'ai testé ca rapidement avant de partir du taf et je n'ai pas refait le test chez moi .

  10. #10
    Membre régulier
    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
    Points : 121
    Points
    121
    Par défaut
    C'est bon, on s'approche de la solution.

    En effet, il y a une liste parallèle. Donc ce que j'ai fait, lorsque j'ajoute mon onglet, je modifie aussi le ToolTip avec celui de mon panel et ainsi en changeant celui du panel ça me change automatiquement celui de l'onglet.




    EN regardant, il y a une fonction setBackgroundAt. Donc je me suis dis je vais faire pareil.
    En fait cela me bloque le changement de tab. Donc je suppose que le problème vient de la gestion des onglets.



    Edit : ça ne me bloque pas, ça enlève la sensibilité de toute la partie que je crée. Je suppose qu’il faut aussi que j’ajoute un lien pour ça ?!!

  11. #11
    Membre du Club Avatar de Liquidsoul
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 51
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par croc14
    C'est bon, on s'approche de la solution.

    En effet, il y a une liste parallèle. Donc ce que j'ai fait, lorsque j'ajoute mon onglet, je modifie aussi le ToolTip avec celui de mon panel et ainsi en changeant celui du panel ça me change automatiquement celui de l'onglet.




    EN regardant, il y a une fonction setBackgroundAt. Donc je me suis dis je vais faire pareil.
    En fait cela me bloque le changement de tab. Donc je suppose que le problème vient de la gestion des onglets.



    Edit : ça ne me bloque pas, ça enlève la sensibilité de toute la partie que je crée. Je suppose qu’il faut aussi que j’ajoute un lien pour ça ?!!
    Si je comprend bien tu as un soucis de changement de tab en cliquant dessus quand tu fais ce genre de modifs c'est ca?
    Parce que je me rappel avoir eu un problème du genre. En fait je mettais un panel avec le setComponentAt et je modifiai le tooltiptext de mon panel, cela faisait que je ne pouvais plus changer d'onglet en cliquant directement sur le panel (il fallait pour cela que je clic sur une partie de l'onglet non recouverte par mon panel).
    Pour palier à ce problème il y avait deux solutions:
    - plutot que mettre en place un tooltiptext dans mon panel, le mettre via le JTabbedPane pour l'onglet en question (pour moi ce n'était pas envisageable dans ma solution
    - ajouter un mouseListener récupérant les évènements de mousePressed sur les tabs et faisant changer l'affichage du JTabbedPane vers le tab cliqué.

    J'espère que je n'ai pas répondu à coté sinon donnes moi plus de précisions

  12. #12
    Membre régulier
    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
    Points : 121
    Points
    121
    Par défaut
    oui, c'est exactement ca le problème !!! Enfin je me sent moins seul.


    Bon je vais tenter la première solution. Et si ca m'est difficile aussi (oui, car ma solution était principalement accés sur le nouveau JPanel) ben j'attaquerais au mouselistener (bon on verra si j'ai un soucis, ce sera mon premier !!!)

    @+

  13. #13
    Membre confirmé Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Points : 554
    Points
    554
    Par défaut
    Je dis peut être une grosse bêtise, mais si tu mets setOpaque(false) sur ton JPanel, il se passe quoi ?

  14. #14
    Membre du Club Avatar de Liquidsoul
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 51
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Claythest
    Je dis peut être une grosse bêtise, mais tu met setOpaque(false) sur ton JPanel, il se passe quoi ?
    D'après la doc le setOpaque ne va intervenir que sur l'affichage et pas sur le comportement vis à vis d'un clic. J'ai essayé sur mon propre projet et pour moi en tous cas ca ne fonctionne pas

  15. #15
    Membre régulier
    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
    Points : 121
    Points
    121
    Par défaut
    en fait il n'y a pas moyen de récupérer le mouseListener de l'onglet que l'on remplace et le rajouter dans celui que l'on cré ?

  16. #16
    Membre du Club Avatar de Liquidsoul
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 51
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par croc14
    en fait il n'y a pas moyen de récupérer le mouseListener de l'onglet que l'on remplace et le rajouter dans celui que l'on cré ?
    Je vais ptet passer pour un idiot mais je ne comprend pas bien ce que tu veux dire

  17. #17
    Membre régulier
    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
    Points : 121
    Points
    121
    Par défaut
    bon en fait je sent que ça va devenir encore plus tendu.

    Finalement, je délègue le changement de couleur à un autre composant qui y a accés. Bon, je trouve pas ça beau du tout mais bon.
    Je vient de voir le problème et je suis sûr que c'est facile d'y remédier, mais il faut savoir comment marche un JTabbedPane (et pas simplement savoir l'utiliser ...)

    En fait, même le ToolTip est différent si on se met à la limite du bord.
    Lorsque je change mon onglet, le tooltip du composant change, mais pas celui du bord qui reste à sa valeur initiale. Dès lors, deux solutions, ou il y a un beug sur le JTabbedPane, ou alors il y a un truc que je ratte (perso je ne suis pas assez expérimenter pour conclure).

    Lorsque l'on change l'onglet, on en déduit que notre nouvelle onglet est collé dessus, mais indépendante de l'arrière de l'onglet.
    Si c'est bien un remplacement, il faudrait refaire tout les liens que le JTabbeDPane avait avec l'ancien JPanel de l'onglet. Et a part celui tu tabAt, toolTipAt, je ne vois pas.




    Une autre question est la dépendance de l'apparence. En fait, lorsque je met le LookAndFeel de windows, je ne peux plus changer de couleur de font. Et avec un autre, j'ai carément un bouton qui disparait !!!








    edit : refflexion perso :
    Juste pour vérifier un truc. Si dans un Component toto, il y a une instance d'un JPanel. Si dans mon JTabbed je remplace setTabAt(i, toto.getJPanel()), alors les deux objet (toto et le JTabbedPane) possède une référence vers le mmême JPanel.
    Donc si je change un truc sur le JPanel, cela doit changer sur le JTabbedPane.
    (mon implémentation dépend de ça).

    Alors deux choses :
    - a quoi sert setToolTipAt alors que l'on peux faire getTab.setToolTip ?
    - pourquoi il semble y avoir 2 objets (l'onglet et l'étiquette dessus) ?

  18. #18
    Membre régulier Avatar de fabred
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2007
    Messages : 180
    Points : 119
    Points
    119
    Par défaut
    En effet, ca va etre tendu !

    Bonne chance !
    Merci de votre aide

  19. #19
    Membre régulier
    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
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par Liquidsoul
    Je vais ptet passer pour un idiot mais je ne comprend pas bien ce que tu veux dire
    Ben l'idée bien que effémaire était de récupéré l'élément sensible de l'ancien onglet et de le mettre sur le nouveau.


    Je ne sais pas dutout comment le tabbedpane sais que l'on a cliqué sur tel ou tel onglet. Perso j'aurais ajouté une action sur chaque onglet qui n'est autre que celle qui met en avant le bon panel (et je pense que c'est le plus logique).
    Donc peux être y a t'il moyen de récupéré cette action.

  20. #20
    Membre régulier
    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
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par fabred
    En effet, ca va etre tendu !

    Bonne chance !

    Pourquoi ?

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