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) :
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
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) { } }
Merci d’avance.
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++; }
Partager