如何将ResultSet转换为字符串并显示在JTextArea中?
将ResultSet转换为字符串并显示在JTextArea的解决方案
嘿,这个需求其实挺常见的,咱们可以通过拼接字符串的方式把ResultSet里的内容整合起来,然后直接设置到JTextArea里就行。具体修改步骤如下:
1. 在Model类中新增生成分数字符串的方法
咱们单独写一个方法来处理ResultSet到字符串的转换,用StringBuilder来拼接内容(比直接用+拼接字符串效率高多了,循环场景下尤其明显):
public static String getScoresAsString() { // 先初始化字符串构建器,开头加上"Scores:" StringBuilder scoreContent = new StringBuilder("Scores:\n"); try { getDb().connectDB(); getDb().createDB(); ResultSet rs = getDb().getScores(); // 遍历ResultSet,把每一行内容拼进去 while (rs.next()) { scoreContent.append("Username: ") .append(rs.getString(1)) .append(" Score: ") .append(rs.getString(2)) .append("\n"); // 每一行结束加换行,让JTextArea显示更清晰 } } catch (SQLException ex) { ex.printStackTrace(); // 如果出错了,也把错误信息拼进去,方便排查 scoreContent.append("\nError loading scores: ").append(ex.getMessage()); } // 把构建好的内容转成字符串返回 return scoreContent.toString(); }
如果原来的loadDatabase方法还要保留控制台打印的功能,可以让它复用这个新方法,避免重复代码:
public static void loadDatabase() { String scores = getScoresAsString(); System.out.print(scores); }
2. 修改Controller类中的事件处理逻辑
直接调用上面的新方法,把返回的字符串设置到JTextArea里就行,替换掉原来的setText("Scores: "):
public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == view.getSubmitButton()) { Model.getDb().insertScores(view.getUsernameTextField().getText(), Model.getScore()); // 这里改成调用新方法,直接设置完整的分数列表 view.getInstructions().setText(Model.getScoresAsString()); } }
这样设置后,JTextArea就会显示所有用户名和分数的列表,每一行对应ResultSet里的一条记录,格式和你之前控制台打印的完全一致~
内容的提问来源于stack exchange,提问作者Caiz22
相关产品推荐
相关产品推荐

