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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 01:06:03