2014-02-12 230 views
0

我只是一個Java新手。我有這個下面的代碼片段:從另一個類訪問變量

class Canvas extends JPanel{ 
    int x=-10,y=-10,z=-10; 
    public Canvas() { 
    } 
    public void setCoordinates(int x,int y, int z){ 
     this.x=x; 
     this.y=y; 
     this.z=z; 
    } 
    public void paintComponent(Graphics g) { 
     for(int i=0; i<50 ;i++){ 
      if(p[i].z==1) g.setColor(Color.red); 
      else if (p[i].z==2) g.setColor(Color.green); 
      else g.setColor(Color.blue); 
      g.fillArc(p[i].x-5,p[i].y-5,10,10,0,360); 
     } 
    } 
} 

我有這個類,它是從一個地方p屬於一個單獨的類。

public class Frame extends JFrame{ 
     ...... 
     public static Points[] p = new Points[50]; 
     .... 
} 

我怎麼能說我有個在類Frame,這樣我可以在Canvas類使用它?

回答

1

p是公共靜態,你可以通過Frame.p訪問它,但如果你要正確地做到這一點,這不是漂亮和優雅的方式

,您將創建單獨的對象,它包含所有你的觀點, 可以如果你想要只有一個實例,就讓它成爲單例。如果你創建是創建應用程序時,你可以將它傳遞到正在使用它每一幀,或者只使用靜態方法來訪問它(如果你有單將工作)

1

Frame.p,因爲它是static,它的名字是p

1

由於pFrame公共靜態字段類,你可以使用類名稱訪問它像Frame.p

1

您可以直接訪問它Frame.p作爲該領域是公共靜態

2

如果以這種方式宣告:

公共靜態Points[] p = new Points[50];

,你可以這樣做:Frame.p怎麼一回事,因爲p是靜態

相反,如果你聲明private Points[] p = new Points[50]; 你在Frame類使用getter方法:

public Point[] getPoints() { 
    return this.p; 
} 
1

您可以使用publicstatic領域一個班級的其他班級與其班級名稱相同。

因爲在你的類Frame領域ppublic static,所以你可以在Canves類使用領域pFrame.p

更多關於靜態字段:Static fields