Précédent   Forum du club des développeurs et IT Pro > Java > Interfaces Graphiques en Java > SWT/JFace
SWT/JFace Forum d'entraide pour les API SWT/JFace. Avant de poster -> FAQ SWT/JFace
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/07/2012, 19h27   #1
pingoui
Membre habitué
 
Avatar de pingoui
 
Inscription : juillet 2004
Messages : 534
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : juillet 2004
Messages : 534
Points : 129
Points : 129
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
pingoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2012, 09h00   #2
Gueritarish
Modérateur
 
Avatar de Gueritarish
 
Homme Marc
Développeur Java
Inscription : mai 2007
Messages : 1 567
Détails du profil
Informations personnelles :
Nom : Homme Marc
Âge : 28
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 567
Points : 3 430
Points : 3 430
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.

Le 5 et 6 juin à Toulouse, la première EclipseCon France !
Gueritarish est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2012, 12h43   #3
pingoui
Membre habitué
 
Avatar de pingoui
 
Inscription : juillet 2004
Messages : 534
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : juillet 2004
Messages : 534
Points : 129
Points : 129
Bonjour Gueritarish,

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

@+
Pingoui
pingoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/07/2012, 22h53   #4
pingoui
Membre habitué
 
Avatar de pingoui
 
Inscription : juillet 2004
Messages : 534
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : juillet 2004
Messages : 534
Points : 129
Points : 129
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
Type de fichier : jpg planning.jpg (49,1 Ko, 3 affichages)
pingoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2012, 13h19   #5
pingoui
Membre habitué
 
Avatar de pingoui
 
Inscription : juillet 2004
Messages : 534
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : juillet 2004
Messages : 534
Points : 129
Points : 129
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,
pingoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2012, 07h02   #6
pingoui
Membre habitué
 
Avatar de pingoui
 
Inscription : juillet 2004
Messages : 534
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : juillet 2004
Messages : 534
Points : 129
Points : 129
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
pingoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2012, 07h46   #7
Gueritarish
Modérateur
 
Avatar de Gueritarish
 
Homme Marc
Développeur Java
Inscription : mai 2007
Messages : 1 567
Détails du profil
Informations personnelles :
Nom : Homme Marc
Âge : 28
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 567
Points : 3 430
Points : 3 430
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.

Le 5 et 6 juin à Toulouse, la première EclipseCon France !
Gueritarish est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2012, 12h21   #8
pingoui
Membre habitué
 
Avatar de pingoui
 
Inscription : juillet 2004
Messages : 534
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : juillet 2004
Messages : 534
Points : 129
Points : 129
Je suis rassuré alors ! Si toi, tu n'y arrives pas... Je n'y serai jamais arrivé

Merci pour ton aide
pingoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2012, 13h41   #9
Gueritarish
Modérateur
 
Avatar de Gueritarish
 
Homme Marc
Développeur Java
Inscription : mai 2007
Messages : 1 567
Détails du profil
Informations personnelles :
Nom : Homme Marc
Âge : 28
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 567
Points : 3 430
Points : 3 430
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.

Le 5 et 6 juin à Toulouse, la première EclipseCon France !
Gueritarish est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h44.


 
 
 
 
Partenaires

Hébergement Web