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

Composants Java Discussion :

Couleur du font et du texte de l'onglet actif


Sujet :

Composants Java

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut Couleur du font et du texte de l'onglet actif
    Salut à tous,

    J'ai un problème de couleur, quand je clique sur un onglet il modifie le contenu de l'onglet mais pas le nom de l'onglet actif
    Voici la classe complète :
    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
     
    package IHM;
     
    /**
     * IHM of Converter application
     * 
     * @author t0163126
     */
    public class IhmConverter extends JFrame {
    	private static final long serialVersionUID = 1L;
     
    	private static ToolBar toolBar;
    	private JPanel panCustomer;
    	private JPanel panTab;
    	private JPanel panLog;
    	private JTextArea txtaLog;
    	private JSplitPane split;
    	private JScrollPane ascenseur;
     
    	private static JTabbedPane tabs;
    	private static TabHDMT HDMT;
    	private static TabNEMO NEMO;
     
    	private int maxW = 0;
    	private int maxH = 0;
    	private static Dimension panelDim;
    	private Dimension newDim;
     
    	// ============================================================
    	/**
             *  Ihm constructorr
             */
    	private IhmConverter() {
    		initIhmConverter();
    	}
     
    	/**
             *  Method initialization
             */
    	private void initIhmConverter() {
    		// window event
    		this.addWindowListener(new ActionWindow());
     
    		HDMT = new TabHDMT(); //1er sous onglet
    		NEMO = new TabNEMO(); //2ème sous onglet (même structure)
    		tabs = new JTabbedPane(SwingConstants.NORTH); //onglet principale
    		// Add tabs
    		tabs.add("HDMT", HDMT); //Je cherche à modifier les couleurs du titre soit ce qui est entre guillemet 
    		tabs.add("NEMO", NEMO);
    		tabs.setOpaque(true);
    		tabs.setMnemonicAt(0, KeyEvent.VK_H); //ALT+H
    		tabs.setMnemonicAt(1, KeyEvent.VK_N); //ALT+N
    		// Dimension
    		final Dimension originalTabsDim = tabs.getPreferredSize();
    		panelDim = new Dimension();
     
    		tabs.addChangeListener(new ChangeListener() {
    			@Override
    			public void stateChanged(ChangeEvent e) {
    				Component p = ((JTabbedPane) e.getSource()).getSelectedComponent();
     
    				panelDim = p.getPreferredSize();
    				newDim = new Dimension(originalTabsDim.width
    						- (maxW - panelDim.width), originalTabsDim.height
    						- (maxH - panelDim.height));
     
    				tabs.getSelectedComponent().setPreferredSize(newDim);
    				//ceci change le texte qui est à l'intérieur de l'onglet pour ainsi dire le sous titre et non le titre de l'onglet
    				tabs.getComponentAt(tabs.getSelectedIndex()).setForeground(Color.white);
    				//même chose mais pour la couleur de fond
    				tabs.getComponentAt(tabs.getSelectedIndex()).setBackground(Color.GRAY);
    				pack();
    			}
     
    		});
    		panTab = new JPanel();
    		panTab.setLayout(new BorderLayout());
    		HDMT.setPreferredSize(panTab.getPreferredSize());
    		NEMO.setPreferredSize(panTab.getPreferredSize());
    		panTab.add(tabs, BorderLayout.CENTER);
     
    		txtaLog = new JTextArea();
    		txtaLog.setFont(new Font("Calibri", Font.PLAIN, 10));
    		txtaLog.setBorder(new LineBorder(new Color(0, 0, 0), 1, true));
    		txtaLog.setEnabled(false);
    		txtaLog.setDisabledTextColor(Color.black);
    		txtaLog.setBackground(Color.lightGray);
    		//Return to automatically line
    		txtaLog.setLineWrap(true);
    		ascenseur = new JScrollPane(txtaLog);
     
    		panLog = new JPanel();
    		panLog.setLayout(new BorderLayout());
    		panLog.setBackground(Color.lightGray);
    		panLog.add(ascenseur, BorderLayout.CENTER);
     
    		// Customer area
    		panCustomer = (JPanel) this.getContentPane();
    		panCustomer.setLayout(new BorderLayout());
     
    		//Separator between panTabs and tabLog
    	    split = new JSplitPane(JSplitPane.VERTICAL_SPLIT, panTab, panLog);
    	    split.setOneTouchExpandable(true);
    		//add to customer pane
    	    panCustomer.add(split, BorderLayout.CENTER);
     
    		// Add toolBar
    		toolBar = new ToolBar();
    		this.add(toolBar, BorderLayout.NORTH);
    	}
     
    	// ============================================================
    	// instenciation
    	private static IhmConverter hdmt;
    	public static IhmConverter getInstance() {
    		if (hdmt == null) {
    			hdmt = new IhmConverter();
    		}
    		return hdmt;
    	}
     
    	// ============================================================
    	// Getter and setter
    	public static TabHDMT getHDMT() {
    		return IhmConverter.HDMT;
    	}
    	public static TabNEMO getNEMO() {
    		return IhmConverter.NEMO;
    	}
    	public static ToolBar getToolBar() {
    		return IhmConverter.toolBar;
    	}
    }
    Merci pour vos aides

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //ceci change le texte qui est à l'intérieur de l'onglet pour ainsi dire le sous titre et non le titre de l'onglet
    				tabs.getComponentAt(tabs.getSelectedIndex()).setForeground(Color.white);
    tu veux dire que ça change la couleur du texte, pas le texte lui-même. Et une action sur un composant, agit sur le composant, pas sur un truc qui serait ailleurs comme ce que tu désignes comme "titre" et que je devine être le titre situé dans le TitledBorder que tu as mis en bordure.

    Pour pouvoir faire çà, il faut aller chercher le composant, le caster en JComponent (parce qu'un Component n'a jamais de bordure, donc pas de méthode getBorder()), demander sa bordure par getBorder(), caster l'instance obtenue en TitledBorder (en tenant compte des précautions d'usage pour éviter le ClassCastException);, puis appeler la méthode adéquate de TitledBorder pour changer la couleur (setTitleColor()).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut
    Est-ce ce que tu viens de me dire ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    JComponent component = (JComponent) tabs.getSelectedComponent();
    TitledBorder title = (TitledBorder) component.getBorder();
    title.setTitleColor(Color.white);
    Ceci également change donc le TitledBorder et non le titre de l'onglet, mois je voudrais que l'onglet actif devient couleur inversé des qu'il est actif

    Pour dire simplement je pense, pour maJTabbedPane.add("titre" composant); je veux maîtriser le titre selon s'il est actif ou pas

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Donc c'est la méthode setForegroundAt(int index, Color foreground) de JTabbedPane que tu dois appeler. Rien à voir avec le "tabComponent".
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut
    Beaucoup mieux,
    Deux chose :
    1 : il fait le contraire, donc il le fait pour celui qui n'est pas actif
    2 : et celui qui est actif je sais pas pourquoi mais il lui change la couleur de police aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tabs.setForegroundAt(tabs.getSelectedIndex(), Color.white); 
    tabs.setBackgroundAt(tabs.getSelectedIndex(), Color.GRAY);
    Ça ne doit probablement pas être grand chose !

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par nadong94 Voir le message
    Beaucoup mieux,
    Deux chose :
    1 : il fait le contraire, donc il le fait pour celui qui n'est pas actif
    Il fait ce qu'il doit faire pour index spécifié, ni plus ni moins... passe le bon index, c'est tout...

    Citation Envoyé par nadond94 Voir le message
    2 : et celui qui est actif je sais pas pourquoi mais il lui change la couleur de police aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tabs.setForegroundAt(tabs.getSelectedIndex(), Color.white); 
    tabs.setBackgroundAt(tabs.getSelectedIndex(), Color.GRAY);
    Ça ne doit probablement pas être grand chose !
    oui, setForegroundAt change la couleur d'avant-plan, soit de texte. setBackgroundAt change la couleur d'arrière-plan (en adéquation avec le nom des méthodes)... et donc ?

    Voilà : je sélectionne un onglet, le texte de l'étiquette devient rouge, j'en sélectionne un autre, le texte du précédent redevient à la valeur par défaut et le nouveau passe en rouge... ce n'est pas le contraire de celui qui n'est pas actif (ou je ne sais quoi) !

    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
    public class DemoJTabbedPane {
     
    	private static final Color SELECTION_COLOR = Color.RED;
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		final JTabbedPane pane = new JTabbedPane();
    		for(int i=1; i<=3; i++) {
    			pane.add(String.valueOf(i), createPanel(i));
    		}
     
    		pane.addChangeListener(new ChangeListener() {
     
    			private int lastSelected = pane.getSelectedIndex();
     
    			{
    				pane.setForegroundAt(lastSelected, SELECTION_COLOR);
    			}
     
    			@Override
    			public void stateChanged(ChangeEvent e) {
    				if ( lastSelected>=0 ) {
    					pane.setForegroundAt(lastSelected, pane.getForeground()); // rétablir la couleur par défaut
    				}
    				lastSelected = pane.getSelectedIndex();
    				pane.setForegroundAt(lastSelected, SELECTION_COLOR);
    			}
     
    		});
     
    		frame.add(pane);
    		frame.setSize(300, 300);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	private static JPanel createPanel(int i) {
    		JPanel panel = new JPanel();
    		panel.setBorder(BorderFactory.createTitledBorder("Panel " + i));
    		return panel;
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 213
    Points : 96
    Points
    96
    Par défaut
    Nickel ça marche, j'ai donc rajouter la méthodes lastSelection moi aussi !
    et Merci pour ta patience

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. StatusBar texte et couleur de font
    Par AT dans le forum Débuter
    Réponses: 5
    Dernier message: 07/01/2008, 13h52
  2. [Tlistview] Couleur de fond et de texte d'une ligne
    Par radimby dans le forum Composants VCL
    Réponses: 8
    Dernier message: 21/12/2005, 09h17
  3. Couleur mettre en gras le text d un JTextArea
    Par jean_bobi dans le forum Composants
    Réponses: 4
    Dernier message: 01/11/2005, 12h28
  4. Champ texte en deux couleurs de 'font'
    Par zenzen dans le forum Forms
    Réponses: 3
    Dernier message: 13/01/2005, 07h53
  5. Changement de couleur quand j'affiche du texte...
    Par MaxPayne dans le forum OpenGL
    Réponses: 3
    Dernier message: 10/12/2004, 13h55

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