Java TODO应用MySQL数据库无法显示用户输入内容问题排查
问题诊断与修复方案
核心问题:输入文本框未添加到界面
你在AppFrame构造方法里新建了novyText = new JTextField();,但从未将这个文本框添加到窗口界面中。用户根本没有输入内容的入口,所以novyText.getText()始终返回空字符串,导致存入数据库的task_name为空,控制台输出自然也是空值。
修复步骤:
- 在
AppFrame构造方法中,把novyText添加到合适的布局位置,比如添加到按钮面板或单独的区域:
// 示例:添加到窗口北部区域 this.add(novyText, BorderLayout.NORTH); // 或者根据按钮面板的布局,将文本框加入btnpanel btnpanel.add(novyText);
- 给文本框设置合适的显示尺寸,方便用户输入:
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
相关产品推荐
相关产品推荐

