Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  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 Marc
    Développeur Java
    Inscrit en
    mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Nom : Homme Marc
    Âge : 30
    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 776
    Points
    3 776

    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 :
    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 :
    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 :
    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 Marc
    Développeur Java
    Inscrit en
    mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Nom : Homme Marc
    Âge : 30
    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 776
    Points
    3 776

    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 Marc
    Développeur Java
    Inscrit en
    mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Nom : Homme Marc
    Âge : 30
    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 776
    Points
    3 776

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •