[英]How do I access variables in the main class from another class in the package (java)?
[英]How do I access variables from the main class from another class (java)?
我正在java中創建一個cookie clicker克隆來練習我的java技能,我有一個小問題,我有一些變量在main方法中聲明,我想從ActionListener類訪問。 以下是ActionListener類的一些示例代碼。 int變量(例如clicks,grandamaCost)和JTextFields(例如display,cpsDisplay)都在main方法中。 我想知道如何在main方法中訪問變量,以便此代碼可以在其他類中工作。 謝謝!
@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;
}
}
}
你的變量應該是字段 。
字段在類的方法之外聲明,通常位於類聲明的正下方。 可以通過類的所有方法訪問字段。
也可以使用點運算符從其他類(除非它們是私有的)訪問它們。
static
,則其類名用於引用它。 例
public class Man {
public String name; //this is a field
public static String gender = "Male"; //this is a static field
public Man(String newName) {
name = newName; //assigns the value of a field from within a method
}
}
還有另一課......
public class Main {
public static void main(String[] args) {
Man bob = new Man("Bob");
System.out.println(bob.name); //referenced from object, prints Bob
System.out.println(Man.gender); //referenced from class name, prints Male
}
}
要更好地控制字段的訪問權限,可以使用getter和setter 。 讀一讀!
public class ActionClass {
{
private static int clicks;
@Override
public void actionPerformed(ActionEvent e) {
clicks++;
}
public static void setClicks(int c){
clicks = c;
}
public static int getClicks(){
return clicks;
}
}
public class AnyClass {
{
// now you have access to your clicks count .
int clicks = ActionClass.getClicks();
// set value of clicks
ActionClass.setClicks(0);
}
在這里,我將舉例說明您的需求。 在這段代碼中,您只需要將要添加的任何內容設置為actionPerformed
as static
。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class testJava implements ActionListener {
protected static JButton b; // since this is static you can
// now access it in other classes
public static void main(String[] args) {
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == b) {
// do stuff here
}
}
}
使用字段及其訪問方法。 這里有一個例子。
您必須使變量公共類變量而不是方法變量,從而增加變量的范圍和可見性。 像這樣:
public class ActionClass {
{
public string MyPublicVariable = "woot";
@Override
public void actionPerformed(ActionEvent e) {
...
}
}
更流行/推薦的方法是使用getter / setter而不是明確公開變量。 您可以通過公共方法訪問私有變量,如下所示:
public class ActionClass {
{
@Override
public void actionPerformed(ActionEvent e) {
private string MyPublicVariable = "woot";
public void setMyString(string newString){
MyPublicVariable = newString;
}
public string getMyString(){
return MyPublicVariable;
}
}
}
這樣,您可以更好地控制變量的設置。
您可以將主類實例引用傳遞給另一個類實例,或者注冊回調。 第一種方式
Class MainClass {
private int mValue;
public void init() {
AnotherClass cla = new AnotherClass(this);
}
public void setValue(int value) {mValue = value;}
public int getValue(){return mValue;}
}
Class AnotherClass {
private MainClass mMain;
public AnotherClass(MainClass ref) {
mMain = ref;
}
public void controlValue() {
if (mMain != null) {
mMain.setValue(1);
mMain.getValue();
}
}
}
對於第二種方式1.聲明接口2.在主類3中實現此接口。將此實現注冊到另一個類。 4.在另一個類中獲取並設置值。
public interface ClassListener {
public void setValue(int value);
public int getValue();
}
public class MainClass implements ClassListener{
private int mValue;
public void registerListener() {
AnotherClass cla = new AnotherClass();
cla.registerListener(this);
}
@Override
public void setValue(int value) {
// TODO Auto-generated method stub
mValue = value;
}
@Override
public int getValue() {
// TODO Auto-generated method stub
return mValue;
}
}
public class AnotherClass{
private ClassListener mListener;
public void registerListener(ClassListener listener) {
mListener = listener;
}
public void controlValue() {
if (mListener != null) {
int value = mListener.getValue();
mListener.setValue(++value);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.