JavaFX如何将哈希表内容输出到TextArea?可将void改为String吗?
解决方法
- 你现有代码存在2个核心错误:
textArea.setWrapText()是设置TextArea是否开启自动换行的方法,仅接收布尔值参数,不是用来设置显示文本的,设置显示内容需要调用textArea.setText()方法- 原
printHashTable()是void无返回值的方法,自然没有内容可以传给TextArea
方案1:修改方法返回String(最推荐)
你完全可以把方法的返回值改成String来实现需求,改造后的代码如下:
public String getHashTableContent() { // 用StringBuilder拼接所有内容,避免多次字符串拼接的性能损耗 StringBuilder sb = new StringBuilder(); for (int i = 0; i < TABLE_SIZE; i++) { sb.append("\nBucket ").append(i + 1).append(" : "); LinkedHashEntry entry = table[i]; while (entry != null) { sb.append("[").append(entry.data).append(" ,").append(entry.value).append("]>"); entry = entry.next; } } // 如果需要保留原有控制台打印的功能,放开下面这行注释即可 // System.out.print(sb.toString()); return sb.toString(); }
JavaFX的事件监听代码修改为:
Print_button.setOnAction((ActionEvent e) -> { // 自动换行设置仅需在组件初始化时配置一次即可,不需要每次点击都重复设置 textArea.setWrapText(true); // 把哈希表内容设置到TextArea显示 textArea.setText(ht.getHashTableContent()); });
方案2:不改原有printHashTable方法的实现(不推荐)
如果因为业务限制不能修改原方法的返回值和实现,可以临时重定向系统输出流捕获控制台打印的内容,再设置到TextArea:
Print_button.setOnAction((ActionEvent e) -> { // 保存原来的系统输出流 PrintStream oldOut = System.out; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); System.setOut(new PrintStream(baos, StandardCharsets.UTF_8)); // 调用原打印方法,输出内容会被捕获到baos中 ht.printHashTable(); // 把捕获到的内容转成字符串设置到TextArea textArea.setText(baos.toString(StandardCharsets.UTF_8)); } finally { // 恢复原有输出流,避免影响其他控制台打印逻辑 System.setOut(oldOut); } });
内容的提问来源于stack exchange,提问作者Noor Khalil
相关产品推荐
相关产品推荐

