当前位置: 首页 > 知识库问答 >
问题:

javafx-settext()不起作用

席俊驰
2023-03-14

我无法设置TextField的文本。没有错误,但Textfield仍然为空。程序的其余部分正在工作,方法被调用,system.out.println(...)打印正确的文本。所以问题是,不能设置textfield的文本。即使我只是写textfield.settext(“0”);textfield仍然为空。当我在public void initialize(...)下为textfield设置文本时也管用。那么为什么它在SetCurrentInfo中不起作用呢?

@FXML
private TextField textField;

private Info currentInfo;

 @Override
public void initialize(URL url, ResourceBundle rb) {
}   

public void setCurrentInfo(Info currentInfo) {
    textField.setText(currentInfo.getpw1());
    System.out.println(currentInfo.getpw1());
    this.currentInfo = currentInfo;
}

控制器中调用setCurrentInfo的部分:

@FXML
private void handleBtn1(ActionEvent event) throws Exception{
    Info info = new Info(textFieldA.getText(), textFieldB.getText());
    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(getClass().getResource("FXMLPassword.fxml"));
    loader.load();
    Stage stage; 
    Parent root;
    if(event.getSource()==btn1){
        //get reference to the button's stage         
        stage=(Stage) btn1.getScene().getWindow();
        //load up OTHER FXML document
        root = FXMLLoader.load(getClass().getResource("FXMLPassword.fxml"));
    }
    else{
        stage=(Stage) btn1.getScene().getWindow();
        root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
    }
    //create a new scene with root and set the stage
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.show();
    FXMLPasswordController passwordController = loader.getController();
    passwordController.setCurrentInfo(info);
    }

共有1个答案

屠嘉勋
2023-03-14

您正在从错误的FXMLLoader检索控制器。特别是,您需要:

FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("FXMLPassword.fxml"));
loader.load();

然后后来

FXMLPasswordController passwordController = loader.getController();

在此代码中,创建FXMLLoader并将其指向FXMLPassword.fxml文件。但是当调用loader.load()读取fxml文件并创建其中定义的UI时,对结果什么也不做。因此,调用loader.load()创建的UI永远不会显示。

root = FXMLLoader.load(getClass().getResource("FXMLPassword.fxml"));
@FXML
private void handleBtn1(ActionEvent event) throws Exception{
    Info info = new Info(textFieldA.getText(), textFieldB.getText());
    Stage stage; 
    Parent root;
    if(event.getSource()==btn1){
        //get reference to the button's stage         
        stage=(Stage) btn1.getScene().getWindow();
        //load up OTHER FXML document
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getResource("FXMLPassword.fxml"));
        root = loader.load();
        FXMLPasswordController passwordController = loader.getController();
        passwordController.setCurrentInfo(info);
    }
    else{
        stage=(Stage) btn1.getScene().getWindow();
        root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
    }
    //create a new scene with root and set the stage
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.show();
}
 类似资料:
  • JavaFx文本字段。setText()方法不工作当从另一个线程调用时,我正在从另一个线程调用received()方法。但我无法将文本设置为文本字段,所以我使用了平台。稍后运行,但它不起作用。 DepartmentsController是我的控制器类,它接收了从另一个线程调用的方法(kryonet thread kryonet是一个高级网络库)。 我有主类,是启动的javafx应用程序,初始化控制

  • 我希望进度条显示60min状态,但当离开15000min时并没有真正显示状态。

  • 问题内容: 不仅如此,其他代码也有相同的问题。只是不能使用ImageView。 环境:macOS,IntelliJ 造成原因:java.lang.IllegalArgumentException:无效的URL:无效的URL或找不到资源 问题答案: 该图像构造函数接受一个url作为参数。如果您未在其中添加协议,则它将假定该项目来自类路径。显然,不会出现在您的类路径中。 要从文件而不是类路径中读取,请

  • 我面临的问题,以开发一个演示JavaFX程序的图像查看作为一个新手。这里,我在BorderPane中心位置有一个ImageView,它用StackPane和VBox包装。其中StackPane总是与VBox一起增长,我将ImageView与StackPane Width和Height属性绑定在一起,这样当我调整窗口大小时,ImageView就会改变它的设置亮度和重量。它的工作很好,我想,但问题是,

  • 我只是做了一个简单的应用程序,包括FlowPane和一些有按钮的VBoxs。 主类是这样的。 这个画廊.class是扩展FlowPane的主要后台类。 而PlotterPanel就是VBox,有按钮,可以在图库中拖拽。 问题是,当我在图库中拖动绘图器面板时,它第一次就不能被拖动。我在第二次尝试后工作。当我开始拖动时,它显示了拖动框,但是当我尝试放在另一个节点上时,鼠标点显示x符号。但是当目标已经尝

  • 我尝试了以下代码来创建动态TextField,并将其添加到ScrollPane中的VBox中。但我面临的问题是,如果添加的TextField数量超过了TextField在ScrollPane中不可见。 行ScrollPane.setvValue(double.max_value);不起作用。 ScrollPaneDemo.java TextFieldClass.java