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

Java TODO应用MySQL数据库无法显示用户输入内容问题排查

问题诊断与修复方案

核心问题:输入文本框未添加到界面

你在AppFrame构造方法里新建了novyText = new JTextField();,但从未将这个文本框添加到窗口界面中。用户根本没有输入内容的入口,所以novyText.getText()始终返回空字符串,导致存入数据库的task_name为空,控制台输出自然也是空值。

修复步骤:

  1. 在AppFrame构造方法中,把novyText添加到合适的布局位置,比如添加到按钮面板或单独的区域:
// 示例:添加到窗口北部区域
this.add(novyText, BorderLayout.NORTH);
// 或者根据按钮面板的布局,将文本框加入btnpanel
btnpanel.add(novyText);
  1. 给文本框设置合适的显示尺寸,方便用户输入:
novyText = new JTextField(20); // 设置默认显示20列宽度

其他潜在问题及优化点

1. Task类中Color比较逻辑错误

isDone()方法里用==比较Color对象:

return taskname.getBackground() == Color.LIGHT_GRAY;

Color是引用类型,==比较的是对象引用而非颜色值。如果背景色是通过new Color(...)方式设置的,==会返回false,导致状态判断错误。应改用equals():

return Color.LIGHT_GRAY.equals(taskname.getBackground());

2. 数据库资源未正确关闭

addTaskToDatabase方法中,PreparedStatement和Connection使用后未关闭,会造成数据库连接泄漏。建议用try-with-resources自动管理资源:

public void addTaskToDatabase(Task task) {
    String taskName = task.getTaskname();
    boolean isDone = task.isDone();

    String query = "INSERT INTO tasks (task_name, is_done) VALUES (?,?)";
    try (Connection conn = database.getConnection();
         PreparedStatement statement = conn.prepareStatement(query)) {
        statement.setString(1, taskName);
        statement.setBoolean(2, isDone);
        statement.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    System.out.println("Query: " + query);
    System.out.println("Task Name: " + taskName);
    System.out.println("Is Done: " + isDone);
}

3. 焦点监听功能补全

Task类的focusLost方法是空实现,可补充逻辑:当用户离开文本框且内容为空时,恢复默认提示文本:

@Override
public void focusLost(FocusEvent e) {
    if (taskname.getText().trim().isEmpty()) {
        taskname.setText("enter task");
    }
}

内容的提问来源于stack exchange,提问作者lenkZel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:07:28