Comment puis-je accéder aux variables de la classe principale à partir d'une autre classe (java)?
Je suis en train de faire un cookie clicker clone en java pour la pratique mes compétences java et j'ai un petit problème, j'ai des variables qui sont déclarées dans la principale méthode que je veux accéder à partir d'un ActionListener classe. Voici un exemple de code à partir de l'ActionListener classe. l'int variables (ex. clics, grandamaCost) et le JTextFields (ex. affichage, cpsDisplay) sont tous dans la méthode main. Je me demandais comment je pouvais avoir accès à des variables dans la méthode main de sorte que ce code pourrait fonctionner dans l'autre classe. Merci!
@Override
public void actionPerformed(ActionEvent e) {
JButton b = (JButton) e.getSource();
button(b.getText());
}
public void button(String input) {
switch (input) {
case "Cookie":
clicks++;
display.setText("Cookies: " + clicks + "");
cpsDisplay.setText("CPS: " + cps);
break;
case "Buy grandma":
if (clicks >= grandmaCost) {
grandmas++;
clicks = clicks - grandmaCost;
grandmaCost = (int) ((.15 * grandmaCost) + grandmaCost);
cps++;
}
display.setText("Cookies: " + clicks + "");
prices[0].setText("$" + grandmaCost);
cpsDisplay.setText("CPS: " + cps);
break;
case "Buy monkey":
if (clicks >= monkeyCost) {
monkeys++;
clicks = clicks - monkeyCost;
monkeyCost = (int) ((.15 * monkeyCost) + monkeyCost);
cps = cps + 2;
}
display.setText("Cookies: " + clicks + "");
prices[1].setText("$" + monkeyCost);
cpsDisplay.setText("CPS: " + cps);
break;
case "Buy Teemo":
if (clicks >= teemoCost) {
teemos++;
clicks = clicks - teemoCost;
teemoCost = (int) ((.15 * teemoCost) + teemoCost);
cps = cps + 3;
}
display.setText("Cookies: " + clicks + "");
prices[2].setText("$" + teemoCost);
cpsDisplay.setText("CPS: " + cps);
break;
}
}
}
OriginalL'auteur Chip Goon Lewin | 2013-10-17
Vous devez vous connecter pour publier un commentaire.
Vos variables doivent être champs.
Champs sont déclarés à l'extérieur d'une classe de méthodes et se trouvent généralement juste en dessous de la déclaration de classe. Les champs peuvent être consultées par toutes les méthodes d'une classe.
Ils peuvent également être accessible à partir d'autres classes (sauf s'ils sont privés) à l'aide de l'opérateur point.
static
, son nom de la classe est utilisé pour y faire référence.Exemple
et une autre classe...
Et avoir plus de contrôle sur les accès de vos champs, vous pouvez utiliser les accesseurs et mutateurs. Prendre une lecture!
OriginalL'auteur Joel Christophel
}
OriginalL'auteur Shaban Mousa
Ici, je vais vous donner un exemple pour exactement ce dont vous avez besoin. Dans ce code il vous suffit juste besoin de mettre quelque chose que vous aimeriez ajouter à
actionPerformed
commestatic
.OriginalL'auteur Ducksauce88
Que vous auriez à faire les variables publiques de variables de classe au lieu de la méthode des variables, ce qui augmente la portée et la visiblity des variables. Comme:
Plus populaires/recommandé façon de le faire est d'utiliser un getter/setter, au lieu de rendre la variable explicitement public. Vous accéder à une variable privée par le biais de méthodes publiques de la sorte:
De cette façon, vous avez plus de contrôle sur ce que vos variables sont définies.
OriginalL'auteur dckuehn
À l'aide de champs et de leurs méthodes d'accès. Un exemple ici.
OriginalL'auteur Nishant Shreshth
Vous pouvez passer la principale instance de la classe de référence à une autre instance de classe, ou registre de rappel.
Pour la première
Pour la deuxième manière
1. déclarer une interface
2. implémenter cette interface dans la classe principale
3. enregistrer cette mise en œuvre à une autre classe.
4. obtenir et définir la valeur dans une autre classe.
OriginalL'auteur yushulx