Doug
Doug

Reputation: 387

Java Access Main Class Variables

I'm making a small game in which the Main class holds all the objects and variables and calls the methods within the classes themselves that do most of the work. Pretty standard. Unfortunately, that means that many of the variables I need are in the Main class where I can't access them.

For instance, as a test I wanted a ball to bounce around the screen, simple enough, but I need the dimensions of the screen, which I can get easily using the getSize() method in the main class. But when I create the Ball class which will bounce around, I can't access the getSize() method because it is in the Main class. Is there anyway to call it?

I know I can pass the variables to the Ball class in the constructor or for each method I need, but I want to see if there is some way I can take whichever variables I need when I need them, rather than passing it all the information whenever I make a new object.

Main.class

public void Main extends JApplet {
    public int width = getSize().width;
    public int height = getSize().height;

    public void init(){
        Ball ball = new Ball();
    }
}

Ball.class

public void Ball {
    int screenWidth;
    int screenHeight;

    public Ball(){
        //Something to get variables from main class
    }
}

Upvotes: 2

Views: 13600

Answers (3)

Luiggi Mendoza
Luiggi Mendoza

Reputation: 85779

Pass the variables you need to your objects. You can even create a singleton class containing all the constants/configurations that your classes need.

Example given:

Constants class

public class Constants {
    private static Constants instance;

    private int width;
    private int height;

    private Constants() {
        //initialize data,set some parameters...
    }

    public static Constants getInstance() {
        if (instance == null) {
            instance = new Constants();
        }
        return instance;
    }

    //getters and setters for widht and height...
}

Main class

public class Main extends JApplet {
    public int width = getSize().width;
    public int height = getSize().height;

    public void init(){
        Constants.getInstance().setWidth(width);
        Constants.getInstance().setHeight(height);
        Ball ball = new Ball();
    }
}

Ball class

public class Ball {
    int screenWidth;
    int screenHeight;

    public Ball(){
        this.screenWidth = Constants.getInstance().getWidth();
        this.screenHeight= Constants.getInstance().getHeight();
    }
}

Another way can be to start the object instance with the parameters you need. Example given:

Main class

public class Main extends JApplet {
    public int width = getSize().width;
    public int height = getSize().height;

    public void init(){
        Ball ball = new Ball(width, height);
    }
}

Ball class

public class Ball {
    int screenWidth;
    int screenHeight;

    public Ball(int width, int height){
        this.screenWidth = width;
        this.screenHeight= height;
    }
}

There are more ways to achieve this, just look out yourself and choose the one you think it would be better for your project.

Upvotes: 4

Manfred
Manfred

Reputation: 1

why do not this way:

public void Main extends JApplet {
public int width = getSize().width;
public int height = getSize().height;

public void init(){
    Ball ball = new Ball(width, height);
}


public void Ball {

public Ball(int screenWidth, int screenHeight){
    //use the variables
}

Upvotes: 0

Ved
Ved

Reputation: 8757

you can access them using simply two arg constructor.

public void init(){
        Ball ball = new Ball(width,height);
    }

public Ball(width,height){
        //access variables here from main class
    }

Upvotes: 1

Related Questions