繁体   English   中英

我如何从 Java 中的不同类访问变量?

[英]How Would I get access to a variable from a different class in java?

我目前有一个变量,我想在不同的类中访问它,但我不确定我将如何去做。 我试过做像int nums = SizeSelect.amount;这样的东西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);
        }

您的问题需要一些关于何时何地声明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更多信息。

SizeSelect 中的 amount 变量对于每个 onClicked 处理程序都是本地的,因此在处理程序函数范围之外无法访问。

如果您希望能够达到 SizeSelect.amount,则需要在类中将其声明为静态。

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

请注意,这是一个快速修复,更合适的解决方案是使用 getter/setter。 https://www.w3schools.com/java/java_encapsulation.asp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM