Как получить доступ к переменной из другого класса в java? - PullRequest
0 голосов
/ 17 марта 2020

В настоящее время у меня есть переменная, к которой я хотел бы получить доступ в другом классе, но я не уверен, как бы я go сделал это. Я пытался сделать что-то вроде int nums = SizeSelect.amount;, но это не сработало. Вот код из класса, я пытаюсь получить доступную сумму.

public class SizeSelect extends BorderPane {
    public SizeSelect(){
        size8.setOnMouseClicked(e ->{
            MainScene.mainStage.setScene(new EnterNamesScene());
            int amount = 9;
        });

        size32.setOnMouseClicked(e ->{
            MainScene.mainStage.setScene(new EnterNamesScene());
            int amount = 33;
        });

        size16.setOnMouseClicked(e ->{
            MainScene.mainStage.setScene(new EnterNamesScene());
            int amount = 17;
        });

и вот код, к которому я пытаюсь получить доступ к этой переменной

public class EnterNames extends BorderPane {
    public EnterNames(){
        int nums = SizeSelect.amount;
        for (int j = 0; j < nums; j++) {
            int teamNum = j + 1;
            TextField test = new TextField();
            test.setPromptText("Enter Team " + teamNum);
            box.getChildren().add(test);
            test.setMaxWidth(500);
        }

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Ваш вопрос нуждается в некоторой информации о том, когда и где объявлено EnterNames, но , если сделано в EnterNamesScenes, тогда одним из решений было бы сначала добавить amount как EnterNamesScenes атрибута, а затем непосредственно передайте значение из него в качестве аргумента конструктора (в SizeSelect), а затем используйте его для создания экземпляра EnterNames.

Например:

size16.setOnMouseClicked(e ->{
            MainScene.mainStage.setScene(new EnterNamesScene(17));
}

И в EnterNamesScene:

private int amount;
public EnterNamesScene(int amount){
    this.amount=amount; //this value comes from the button action and will be saved to create a EnterName

    //Constructor stuff
}

Затем, когда вы захотите создать экземпляр EnterNames, просто добавьте значение amount в качестве аргумента:

EnterNames en = new EnterNames(this.amount);

И конструктор:

public EnterNames(int amount){
    for (int j = 0; j < amount; j++) {
    int teamNum = j + 1;
    // Rest of the code
}

ПРИМЕЧАНИЕ : Как я уже говорил, это будет работать только в том случае, если EnterNames создается внутри EnterNamesScenes. В противном случае вам придется предоставить дополнительную информацию о том, как создается экземпляр EnterNames.

0 голосов
/ 17 марта 2020

Переменная количества в SizeSelect является локальной для каждого обработчика onClicked и поэтому недоступна вне области действия обработчика.

Если вы хотите получить доступ к SizeSelect.amount, вам нужно объявить его как stati c в классе.

public class SizeSelect extends BorderPane {
    public static int amount;

    public SizeSelect(){
        size8.setOnMouseClicked(e ->{
            MainScene.mainStage.setScene(new EnterNamesScene());
            amount = 9;
        });

        size32.setOnMouseClicked(e ->{
            MainScene.mainStage.setScene(new EnterNamesScene());
            amount = 33;
        });

        size16.setOnMouseClicked(e ->{
            MainScene.mainStage.setScene(new EnterNamesScene());
            amount = 17;
        });

Обратите внимание, что это быстрое решение, более подходящим решением было бы использование метода получения / установки. См https://www.w3schools.com/java/java_encapsulation.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...