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
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
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
Bonjour Gueritarish,
Merci pour ta réponse. Je vais essayer ce soir le FormToolkit et je te tiens au courant
@+
Pingoui
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:
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
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 }
Toutes mes cellules du planning sont dessinées dans drawCells()
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); } }
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
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 ?
Cdt,
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); } }
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
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
Je suis rassuré alors ! Si toi, tu n'y arrives pas... Je n'y serai jamais arrivé
Merci pour ton aide
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager