Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过JavaFX应用程序将变量传递给控制器?_Java_Variables_Controller_Javafx_Fxml - Fatal编程技术网

如何通过JavaFX应用程序将变量传递给控制器?

如何通过JavaFX应用程序将变量传递给控制器?,java,variables,controller,javafx,fxml,Java,Variables,Controller,Javafx,Fxml,我想问一下,是否可以通过JavaFX类传递一个变量,是什么将应用程序扩展到了我的JavaFX控制器?我对JavaFx非常陌生,可能只需要一点时间 目标是将Id从MyClass传递给MyController 我的申请类别: public class MyClass extends Application { private String myVariable="Anything"; public static void main(String[] args) {

我想问一下,是否可以通过JavaFX类传递一个变量,是什么将应用程序扩展到了我的JavaFX控制器?我对JavaFx非常陌生,可能只需要一点时间

目标是将Id从MyClass传递给MyController

我的申请类别:

public class MyClass extends Application {
    private String myVariable="Anything";

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        URL location = getClass().getResource("MyGui.fxml");

        FXMLLoader fxmlLoader = new FXMLLoader();
        fxmlLoader.setLocation(location);
        fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
        Parent root = FXMLLoader.load(location);
        Scene scene = new Scene(root);

        stage.setTitle(title);
        stage.setScene(scene);
        stage.show();
    }
}
我的控制器:

public class Controller extends Group implements Binding {

public void initialize(Map<String, Object> namespace, URL location, Resources resources) {

// HERE I'D LIKE TO GET MY VARIABLE LIKE
System.out.println(myVariable);
}

@Override
public List<Handler> getHandlerChain() {
    return null;
}

@Override
public void setHandlerChain(List<Handler> chain) {
}

@Override
public String getBindingID() {
    return null;
}
}
公共类控制器扩展组实现绑定{
公共void初始化(映射命名空间、URL位置、资源){
//这里我想得到我的变量
System.out.println(myVariable);
}
@凌驾
公共列表getHandlerChain(){
返回null;
}
@凌驾
公共无效setHandlerChain(列表链){
}
@凌驾
公共字符串getBindingID(){
返回null;
}
}

首先,您必须在MyClass中添加setter和getter(因为var是
private
),并将其更改为static:

private static String myVariable;
public String getMyVariable() {
    return myVariable;
}

public void setMyVariable(String myVariable) {
    this.myVariable = myVariable;
}
然后,由于MyClass是静态的,因此可以执行以下操作:

System.out.println(MyClass.getMyVariable());
工作示例: MyClass.java

import java.net.URL;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.fxml.JavaFXBuilderFactory;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class MyClass extends Application {
    private static String myVariable;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        setMyVariable("Anything");
        URL location = getClass().getResource("MyGui.fxml");
        FXMLLoader fxmlLoader = new FXMLLoader();
        fxmlLoader.setLocation(location);
        fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
        Parent root = FXMLLoader.load(location);
        Scene scene = new Scene(root);
        stage.setTitle("Hello Word");
        stage.setScene(scene);
        stage.show();
    }

    public static String getMyVariable() {
        return myVariable;
    }

    public static void setMyVariable(String myVariable) {
        MyClass.myVariable = myVariable;
    }

}
import java.net.URL;
import java.util.ResourceBundle;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;


public class MyController implements Initializable{
    @FXML Label labelVar;
    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {
        labelVar.setText(labelVar.getText() + MyClass.getMyVariable());

    }

}
MyController.java

import java.net.URL;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.fxml.JavaFXBuilderFactory;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class MyClass extends Application {
    private static String myVariable;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        setMyVariable("Anything");
        URL location = getClass().getResource("MyGui.fxml");
        FXMLLoader fxmlLoader = new FXMLLoader();
        fxmlLoader.setLocation(location);
        fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
        Parent root = FXMLLoader.load(location);
        Scene scene = new Scene(root);
        stage.setTitle("Hello Word");
        stage.setScene(scene);
        stage.show();
    }

    public static String getMyVariable() {
        return myVariable;
    }

    public static void setMyVariable(String myVariable) {
        MyClass.myVariable = myVariable;
    }

}
import java.net.URL;
import java.util.ResourceBundle;

import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;


public class MyController implements Initializable{
    @FXML Label labelVar;
    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {
        labelVar.setText(labelVar.getText() + MyClass.getMyVariable());

    }

}
MyGui.fxml



这似乎是可以比较的:没有必要使用公认答案中提出的静态变量。查看详细的post答案和非常详细的post答案这将不起作用,因为getter和setter不是静态的,因此无法从类名中引用方法。@CAGGonzo,只要将它们设置为
静态
。谢谢你指出我在最初的答案中漏掉了它。非常感谢你,我自己做了,但方式相同。没有必要使用静态变量。请参阅详细的帖子答案和非常详细的帖子答案