【问题标题】:Value won't show in second controller after passing value from first controller从第一个控制器传递值后,值不会显示在第二个控制器中
【发布时间】:2017-12-03 07:03:49
【问题描述】:

我试图从一个控制器传递一个值是另一个控制器。我将第二个控制器加载到第一个控制器中并运行第二个控制器中的 setLabelViewPassed() 方法。我遇到的问题是,当我使用 getLabelViewPassed 方法时,它没有收到传递的值。我将传递的值系统化,当我运行它时,值会显示出来,所以我不知道出了什么问题。

控制器一

    package sample.controllers;

import com.jfoenix.controls.JFXButton;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;

import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;

public class ControllerOne {
    private String passedValue;

    @FXML
    private ResourceBundle resources;

    @FXML
    private URL location;

    @FXML
    private Label labelViewOne;

    @FXML
    private JFXButton viewOneButton;

    @FXML
    void initialize() {

        viewOneButton.setOnAction(event -> {
            passedValue = labelViewOne.getText();
            showControllerViewTwo();
        });
    }

    public void showControllerViewTwo() {
        //Get the current scene and hide it
        viewOneButton.getScene().getWindow().hide();

        //Get new view in FXML loader
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getResource("/sample/views/controllerTwo.fxml"));

        try {

            loader.load();

        } catch (IOException e) {
            e.printStackTrace();
        }

        ControllerTwo controllerTwo = loader.getController();
        controllerTwo.setLabelViewPassed(passedValue);

        Parent root = loader.getRoot();
        Stage stage = new Stage();
        stage.setScene(new Scene(root));
        stage.showAndWait();


    }
}

控制器二

    package sample.controllers;

import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXTextField;
import javafx.fxml.FXML;
import javafx.scene.control.Label;

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

public class ControllerTwo {
    private String labelViewPassed;


    @FXML
    private ResourceBundle resources;

    @FXML
    private URL location;

    @FXML
    private Label labelViewTwo;

    @FXML
    private JFXButton viewTwoButton;

    @FXML
    private JFXTextField textFieldViewTwo;

    @FXML
    void initialize() {

        textFieldViewTwo.setText(getLabelViewPassed());

        viewTwoButton.setOnAction(event -> {

        });
    }
    public String getLabelViewPassed() {
        return labelViewPassed;
    }

    public void setLabelViewPassed(String labelViewPassed) {
        this.labelViewPassed = labelViewPassed;
        System.out.println(labelViewPassed);
    }
}

我知道这很简单,但由于某种原因,即使在搜索之后我也无法弄清楚。我只是想从控制器一中的标签中传递值来设置控制器二中标签的文本。

传递给第二个控制器的值被打印出来,但标签没有显示这个新值。

【问题讨论】:

    标签: java javafx controller


    【解决方案1】:

    initialize()FXMLLoader.load() 的执行过程中被调用(所以它在你调用setLabelViewPassed(...) 之前被调用)。

    将设置标签文本的行移至setLabelViewPassed() 方法:

    @FXML
    void initialize() {
    
    
        viewTwoButton.setOnAction(event -> {
    
        });
    }
    public String getLabelViewPassed() {
        return labelViewPassed;
    }
    
    public void setLabelViewPassed(String labelViewPassed) {
        this.labelViewPassed = labelViewPassed;
        textFieldViewTwo.setText(labelViewPassed);
        System.out.println(labelViewPassed);
    }
    

    【讨论】:

    • 谢谢,我知道这很简单,我只是在学习并模拟这个简单的项目以帮助我理解它。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 2014-02-14
    • 1970-01-01
    相关资源
    最近更新 更多