2013-10-17 59 views
3

我在Java製作餅乾唱首歌克隆練習我的Java技能,我有一個小問題,我有一個在我想從一個ActionListener類訪問的主要方法聲明的變量。以下是ActionListener類的一些示例代碼。 int變量(例如clicks,grandamaCost)和JTextFields(例如display,cpsDisplay)都在主要方法中。我想知道如何在主要方法中訪問變量,以便此代碼可以在其他類中使用。謝謝!如何從另一個類(java)的主類訪問變量?

@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; 
    } 
} 

}

回答

9

你的變量應該是fields

字段聲明的類的方法之外,正下方的類聲明通常發現。字段可以被類的所有方法訪問。

也可以使用點運算符從其他類(除非它們是私有的)訪問它們。

  • 如果一個字段標記爲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 
    } 
} 

而且有超過你的字段的訪問更多的控制,你可以使用getters and setters。讀一讀!

0

使用字段及其存取方法。示例here

0

你將不得不作出的變量公共類變量,而不是方法變量,從而增加了變量的作用域和可視性。像這樣:

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; 
     } 
    } 
} 

這種方式,你有超過你的變量設置爲更多的控制。

3
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); 

}

0

你可以通過主類實例引用到另一個類的實例,或者註冊回調。 對於第一方式

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); 
     } 
    } 
} 
1

在這裏,我會給你一個確切的例子,你需要什麼。在這段代碼中,你只是只需要設置任何你想添加到actionPerformedstatic

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 

     } 

    } 

}