Bonjour,
Je souhaite stocker une constante couleur (Color.WHITE par exemple) dans une variable.
Mon but est de pouvoir avoir une variable couleur, qui puisse changer.
Cependant je ne sais pas du tout comment m'y prendre...
Version imprimable
Bonjour,
Je souhaite stocker une constante couleur (Color.WHITE par exemple) dans une variable.
Mon but est de pouvoir avoir une variable couleur, qui puisse changer.
Cependant je ne sais pas du tout comment m'y prendre...
Code:Color variable_color = Color.BLACK;
Le plus simplement du monde :
Code:Color mavariable = Color.WHITE;
Ah oui merci tout simplement (je cherchais à faire un new).
Rien à voir, mais comment je peux accéder à une variable que j'ai crée dans une autre classe (qui est pourtant public).
J'ai justement une variable couleur dans une classe, et dans une instance crée à partir de cette classe, je veux récupérer cette variable ... (je sais pas si j'ai été clair :s )
Crée une méthode qui te retourne cet attribut.
Ce genre de méthode est appelé un getter, et est nommé par convention "getNomVariableRetournée".
De plus, change la visibilité de ton attribut en privé. Dans la plupart des cas, il vaut mieux que ce soit le cas.
Merci, mais ca ne marche pas :s
En gros j'ai 4 classes:
*Main, ou j'instancie une Fenetre (qui s'apelle fenetre)
*Fenetre, qui étend une JFrame, ou j'ai cette variable Color, et ou je crée une Grille (grille)
*Grille, qui étend JPanel, ou je crée une grille avec des Cases
*Case, qui étend JPanel, ou je veux récupérer la variable couleur de fenetre.
Si dans case je fais un fenetre.getCouleur() j'obtient un cannot find symbol (il ne connait pas fenetre)
(En fait je pense que si Case étendait Fenetre, ca marcherait mais ce n'est pas le cas ...)
met ton code
j'ai raccourci un peu
Code:
1
2
3
4
5 public class Main{ public static void main(String[] args){ Fenetre fenetre = new Fenetre(30 , 30); } }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public class Fenetre extends JFrame implements ActionListener{ private int nbCasesLargeur , nbCasesHauteur; private Color couleurPinceau = Color.WHITE; public Fenetre(int _nbCasesLargeur , int _nbCasesHauteur){ nbCasesLargeur = _nbCasesLargeur; nbCasesHauteur = _nbCasesHauteur; //Initialisation de la fenêtre this.setTitle("mon titre"); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Création de la grille Grille grille = new Grille(nbCasesLargeur , nbCasesHauteur); this.setLayout(grille) this.pack(); this.setVisible(true); } public Color getCouleurPinceau(){ return couleurPinceau; } }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 public class Grille extends JPanel{ private int nbCasesLargeur , nbCasesHauteur; private Case[][] grille; public Grille(int _nbCasesLargeur , int _nbCasesHauteur){ nbCasesLargeur = _nbCasesLargeur; nbCasesHauteur = _nbCasesHauteur; grille = new Case[this.nbCasesHauteur][this.nbCasesLargeur]; this.setLayout(new GridLayout(this.nbCasesHauteur , this.nbCasesLargeur)); for(int i = 0 ; i < this.nbCasesHauteur ; i++){ for(int j = 0 ; j < this.nbCasesLargeur ; j++){ grille[i][j] = new Case(i , j); this.add(grille[i][j]); } } } }
Le problème est pour les deux lignes de la classe Case: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 public class Case extends JPanel implements MouseListener{ private int i , j; private Color couleurCase;//Départ:GREEN , Arrivée:RED , Vide:WHITE , Mur:BLACK public Case(int _i , int _j){ i = _i; j = _j; couleurCase = Color.WHITE; this.setBorder(BorderFactory.createLineBorder(Color.BLACK)); this.setBackground(Color.WHITE); this.addMouseListener(this); } public Case(){ this(0 , 0); } public void mouseClicked(MouseEvent event){//Clic souris } public void mouseEntered(MouseEvent event){//Survol souris } public void mouseExited(MouseEvent event){//Sortie zone } public void mousePressed(MouseEvent event){//Presse clic gauche this.setBackground(fenetre.getCouleurPinceau()); couleurCase = fenetre.getCouleurPinceau(); } public void mouseReleased(MouseEvent event){//Relache clic } public int getI(){ return i; } public int getJ(){ return j; } public Color getCouleurCase(){ return couleurCase; } }
this.setBackground(fenetre.getCouleurPinceau());
couleurCase = fenetre.getCouleurPinceau();
il faut que tu passe une référence de fenetre a case par exemple :
en modifiant ton constructeur caseCode:Grille grille = new Grille(nbCasesLargeur , nbCasesHauteur,this);
ou en ajoutant un setteur de fenetre à ta class CaseCode:public Grille(int _nbCasesLargeur , int _nbCasesHauteur,Fenetre fenetre ){
Erf oui merci beaucoup, j'ai fais pas mal de modifs mais mon programme marche :)