p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Membre habitué Avatar de pingoui
    Inscrit en
    juillet 2004
    Messages
    535
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : juillet 2004
    Messages : 535
    Points : 138
    Points
    138

    Par défaut Changer la couleur des bordures

    Bonjour,

    Je sais modifier la couleur de fond d'un composite lors de sa sélection mais peut-on uniquement modifier la couleur des bordures ?

    Cordialement

  2. #2
    Modérateur
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : mai 2007
    Messages : 1 800
    Points : 3 774
    Points
    3 774

    Par défaut

    Salut,

    Je ne pense pas que le changement de couleur des bordures soit prévu nativement. Du coup, ça ne doit pas être supporté en SWT (d'ailleurs, pour indiquer une bordure, on rajoute juste un style et non un type de bordure).
    Mais bon, il reste quand même 2 moyen d'arriver à ça. Tout d'abord, tu peux passer par un PaintListener sur ton composant. Un peu lourd, mais faisable.
    Sinon, tu peux passer par le FormToolkit d'Eclipse.
    Bon, pour le FormToolkit, c'est un peu plus long. Il faut que ton IHM en question soit créer par celui-ci pour que ça marche. Je ne sais pas si tu l'as déjà essayé, c'est assez intuitif pour arriver à ce que tu as déjà. En fait, il te suffit d'utiliser une des méthodes du kit pour créer ton composant plutôt que de passer par un new.

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  3. #3
    Membre habitué Avatar de pingoui
    Inscrit en
    juillet 2004
    Messages
    535
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : juillet 2004
    Messages : 535
    Points : 138
    Points
    138

    Par défaut

    Bonjour Gueritarish,

    Merci pour ta réponse. Je vais essayer ce soir le FormToolkit et je te tiens au courant

    @+
    Pingoui

  4. #4
    Membre habitué Avatar de pingoui
    Inscrit en
    juillet 2004
    Messages
    535
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : juillet 2004
    Messages : 535
    Points : 138
    Points
    138

    Par défaut

    Bonjour,

    Étant rentré tard du travail, j'ai regardé rapidement et je suis confronté à une ClassCastException => Normal vu que je ne peux caster un formToolKit en Composiste... Il faut que je repense mes deux classes pour utiliser le FormToolKit pour mes cellules:
    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
    public class PlanningComposite extends ScrollableComposite implements MouseListener, FocusListener, KeyListener{
     
        private Color activeSelectionBackground;
        private Color inactiveSelectionBackground;
        private Color activeSelectionForeground;
        private Color inactiveSelectionForeground;
        private static final int NUMBER_DAYS_PER_WEEK = 5;
        private static final int NUMBER_AGENT = 6;
        private static final String[] dayTitles= {"","lundi","mardi","mercredi","jeudi","vendredi"};
     
        private PlanningCell[] pCells;
        private PlanningCell selectedCell;
        private int selectedCellIndex;
     
     
        public PlanningComposite(Composite parent, int style) {
    	super(parent, style);
            this.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
     
            activeSelectionBackground = getDisplay().getSystemColor(SWT.COLOR_LIST_SELECTION);
            inactiveSelectionBackground = getBackground();
            activeSelectionForeground = getDisplay().getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT);
            inactiveSelectionForeground = getForeground();
     
            GridLayout gridLayout = new GridLayout();
            gridLayout.makeColumnsEqualWidth = true;
            gridLayout.numColumns = NUMBER_DAYS_PER_WEEK + 1;
            gridLayout.marginHeight = 0;
            gridLayout.marginWidth = 0;
            gridLayout.horizontalSpacing = 0;
            gridLayout.verticalSpacing = 0;
            setLayout(gridLayout);
     
     
            drawHeader();
            drawCells();
     
            addMouseListener(this);
            addFocusListener(this);
            addKeyListener(this);
     
        }
     
        private void drawHeader() {
            for (int i=0;i < NUMBER_DAYS_PER_WEEK + 1;i++){
                Label label = new Label(this, SWT.CENTER);
                label.setText(dayTitles[i]);
                label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
     
            }
        }
     
        private void drawCells() {	
    	int nbOfCells = (NUMBER_DAYS_PER_WEEK +1) * NUMBER_AGENT;
    	pCells = new PlanningCell[nbOfCells];
    	for (int i=0;i < nbOfCells;i++){
    		//PlanningCell cell = new PlanningCell(this,SWT.BORDER);
    		FormColors formColor = new FormColors( Display.getCurrent()); 
    		FormToolkit formToolkit = new FormToolkit( formColor);
    		Composite composite  = formToolkit.createComposite(this,SWT.BORDER);
    		PlanningCell cell = (PlanningCell) composite;
                	cell.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
                	pCells[i] = cell;
                	cell.addMouseListener(this);
                	cell.addKeyListener(this);
            }
        }
     
        private int findCell(Widget cellComposite) {
            for (int i = 0; i < pCells.length; i++) {
                if (pCells[i] == cellComposite) {
                	selectedCellIndex  = i;
                    return i;
                }
            }
            return -1;
        }
     
        private void selectCell(int index) {
        	//On sort de la méthode si la cellule n'est pas selectionnable
        	if (index <=0  || index >= (NUMBER_DAYS_PER_WEEK +1) * NUMBER_AGENT 
        			|| index != 0 && ( index % 6 == 0 ) ){
        		return;
        	};
        	//Déselection de la cellule selectionné précédemment 
        	if (selectedCell != null){
            	selectedCell.setBackground(getBackground());
            	selectedCell.setForeground(getBackground());
        	}
        	//Sélection de la cellule
        	selectedCell = pCells[index];
        	selectedCellIndex = index;
        	selectedCell.setBackground(getSelectionBackgroundColor());
        	selectedCell.setForeground(getSelectionForegroundColor());
        }
     
        private Color getSelectionBackgroundColor() {
            return isFocusControl() ? activeSelectionBackground : inactiveSelectionBackground;
        }
     
        private Color getSelectionForegroundColor() {
            return isFocusControl() ? activeSelectionForeground : inactiveSelectionForeground;
        }
     
    	@Override
    	public boolean isFocusControl() {
            for (Control control = getDisplay().getFocusControl(); control != null; control = control.getParent()) {
                if (control == this) {
                    return true;
                }
            }
            return false;
    	}
     
    	@Override
    	public void focusGained(FocusEvent e) {
    		selectedCell.setBackground(getSelectionBackgroundColor());
    		selectedCell.setForeground(getSelectionForegroundColor());	
    	}
     
    	@Override
    	public void focusLost(FocusEvent e) {
    		selectedCell.setBackground(getSelectionBackgroundColor());
    		selectedCell.setForeground(getSelectionForegroundColor());
     
    	}
     
    	@Override
    	public void mouseDown(MouseEvent e) {
            if (e.button == 1) { // Left click
                setFocus();
                if (e.widget instanceof PlanningCell) {
                    int index = findCell(e.widget);
                    selectCell(index);
                }
            }
     
    	}
    // encore du code ici
     
    }
    et mon composite enfant que je souhaite surligneur lors de sa sélection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class PlanningCell extends Composite implements Listener{	
    	public PlanningCell(Composite parent, int style) {
    		super(parent,style);
    		setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
     
    	}
     
    	@Override
    	public void handleEvent(Event event) {
    		notifyListeners(event.type, event);
    	}
    }
    Toutes mes cellules du planning sont dessinées dans drawCells()
    Si vous avez une idée pour ré-organiser les classes, je suis preneur
    Ci-joint une copie d'écran de ce que j'arrive à faire avec les classes ci-dessus (sans le FormToolKit)

    Cordialement
    Images attachées Images attachées  

  5. #5
    Membre habitué Avatar de pingoui
    Inscrit en
    juillet 2004
    Messages
    535
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : juillet 2004
    Messages : 535
    Points : 138
    Points
    138

    Par défaut

    Bonjour,

    J'ai utilisé la méthode adapt du FormToolKIt pour adapter mon composant (PlanningCell).
    La méthode setBackground (FormColor) fonctionne correctement : le background de mes cellules est modifié
    Par contre les bordures ne changes pas de couleur.... Bizarre ! vous avez une idée ?

    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
     
    	private void drawCells() {	
    		int nbOfCells = (NUMBER_DAYS_PER_WEEK +1) * NUMBER_AGENT;
    		pCells = new PlanningCell[nbOfCells];
    		for (int i=0;i < nbOfCells;i++){
    				FormColors formColor = new FormColors( Display.getCurrent());
    				formColor.createColor( FormColors.BORDER, 0, 0, 255);
    				formColor.setBackground( new Color( Display.getCurrent(),255, 255, 255)); 
    				formToolkit = new FormToolkit( formColor);
     
                	PlanningCell cell = new PlanningCell(this,SWT.BORDER);
                	formToolkit.adapt(cell);
                	formToolkit.paintBordersFor(cell);
     
                	cell.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
                	pCells[i] = cell;
                	cell.addMouseListener(this);
                	cell.addKeyListener(this);
            }
    	}
    Cdt,

  6. #6
    Membre habitué Avatar de pingoui
    Inscrit en
    juillet 2004
    Messages
    535
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : juillet 2004
    Messages : 535
    Points : 138
    Points
    138

    Par défaut

    Bonjour,
    J'ai beau chercher, les bordures ne change jamais de couleur

    J'ai pris l'autre option avec le PaintListener et cela fonctionne correctement

    Merci pour vos conseils

    Cdt,
    Pingoui

  7. #7
    Modérateur
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : mai 2007
    Messages : 1 800
    Points : 3 774
    Points
    3 774

    Par défaut

    Bah pareil... Je dois dire que j'ai fait un petit programme de test et je suis pas non plus arrivé à changer la couleur des bordures. Peut-être une évolution de l'API. Ça m'étonnerait puisque j'ai regardé le code source et si on met la couleur de fond à blanc après avoir changé la couleur de la bordure, ça force la prise en compte de ce changement de couleur.
    Bref. Incompréhensible.

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  8. #8
    Membre habitué Avatar de pingoui
    Inscrit en
    juillet 2004
    Messages
    535
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : juillet 2004
    Messages : 535
    Points : 138
    Points
    138

    Par défaut

    Je suis rassuré alors ! Si toi, tu n'y arrives pas... Je n'y serai jamais arrivé

    Merci pour ton aide

  9. #9
    Modérateur
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : mai 2007
    Messages : 1 800
    Points : 3 774
    Points
    3 774

    Par défaut

    Citation Envoyé par pingoui Voir le message
    Je suis rassuré alors ! Si toi, tu n'y arrives pas... Je n'y serai jamais arrivé
    Mouarf. Merci du compliment. Mais je suis encore qu'un "chercheur" sur les fonctionnalités Eclipse.
    Citation Envoyé par pingoui Voir le message
    Merci pour ton aide
    Avec plaisir
    Pas de questions technique par MP, les forums sont là pour ça.

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

Discussions similaires

  1. [XL-2010] Changer couleur des bordures des cellules
    Par Mrfreeze117 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/01/2015, 14h06
  2. Réponses: 1
    Dernier message: 24/02/2012, 20h42
  3. Changer la couleur des bordures d'un rectangle
    Par yoyoz dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/03/2011, 17h25
  4. Changer la couleur des bordures, lignes et Cie
    Par Emplyst dans le forum BOUML
    Réponses: 1
    Dernier message: 30/04/2007, 20h04
  5. [NetBeans] Changer la couleur des commentaires
    Par Lorenzox dans le forum NetBeans
    Réponses: 3
    Dernier message: 15/12/2004, 08h50

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