You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX无法从TextArea/TextField获取文本,数据库存入空值求助

解决JavaFX中FXML控件绑定失败导致数据为空的问题

问题描述

使用JavaFX作为GUI框架、JDBC作为数据库API,saveCard()方法本应从TextArea和TextField解析用户输入的文本,通过database.insertQuestionAndAnswer()存入数据库,但实际获取的是空字符串,数据库无内容,已确认字符串非null。

核心错误

控制器中手动创建了TextField和TextArea的实例,且未给变量添加@FXML注解,导致FXMLLoader无法将界面上的控件与控制器变量绑定,你操作的是一个全新的空控件,而非用户输入的界面控件。

修复方案

修改控制器代码,给控件变量添加@FXML注解,删除手动创建实例的代码:

package workspace;

import java.io.IOException;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;

public class CardMakerController {

    @FXML
    private CardDatabase database = new CardDatabase();
    @FXML
    private TextField questionContainer;
    @FXML
    private TextArea answerContainer;

    public void changeViewToDefaultScreen(ActionEvent e) throws IOException {
        App.setRootForScene("welcomeScreen");
    }

    public void saveCard() {
        String cardQuestion = questionContainer.getText();
        String cardAnswer = answerContainer.getText();
        System.out.println("问题:" + cardQuestion + ",答案:" + cardAnswer);
        database.insertQuestionAndAnswer(cardQuestion, cardAnswer);
    }
}

原理说明

FXML文件中通过fx:id标记的控件,需要控制器中对应的变量添加@FXML注解来完成绑定,FXMLLoader会自动初始化这些变量并关联到界面上的控件。如果手动创建实例,会覆盖FXMLLoader的注入,导致操作的是与界面无关的空控件,自然获取不到用户输入。

另外修正了原代码中的打印错误,确保调试时能正确输出问题和答案内容。

内容的提问来源于stack exchange,提问作者John Berlin Leonor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:35:19