首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环中的Java StyledDocument insertString()

循环中的Java StyledDocument insertString()
EN

Stack Overflow用户
提问于 2020-04-25 11:21:27
回答 1查看 130关注 0票数 0

我目前正在使用JSwing编写一个非常简单的程序。在一个JTextArea ("textArea")中有一个JScrollPane ("textPane")。我用一个名为TextArea StyledDocumentdoc编辑了这个中的文本和内容。但是,当我想在when循环中将字符串插入到这个文档中时,所有文本都会在循环结束后立即出现。我想看到的效果是,在Thread.sleep()的帮助下,文本一个接一个地出现,一行行。

下面是我的代码示例:

代码语言:javascript
复制
while (listening == false && a <= StoryInterface.getDiaNum()) {
    doStoryMode(a, b);
    Thread.sleep(100); 
    if (b == StoryInterface.getNumOfSentence()[a] - 1) {
        b = 1;
        a ++;
    } else {
        b ++;
    }
}

其中doStoryMode(a, b)是一个调用doc.insertString(...)的简单方法。这个计划是可行的,但我不能一个接一个地看到事情的发展。我试图通过编写textPane.repaint()textArea.repaint()来解决这个问题,但都没有成功。我在网上搜索,有人说可以通过invokeAndWait()方法解决这个问题,但是当我这样做时,会显示错误消息“无法从事件调度器线程调用invokeAndWait”。

请帮我处理这个。我对这些概念非常陌生。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-25 15:36:19

我用一个名为"doc“的TextArea来编辑文本和内容。

JTextArea不支持StyledDocument。如果您想要样式化的文本,则需要使用JTextPane。

有关更多信息和示例,请参阅有关文本组件特征的Swing教程中的部分。

但是,当我想在when循环中将字符串插入到这个文档中时,所有文本都会在循环结束后立即出现。

对,是这样。您的代码正在事件调度线程(EDT)上执行。在循环执行完成之前,GUI无法重新绘制自己。

因此,为了防止EDT阻塞,需要在单独的线程上执行代码。在这种情况下,您可以使用SwingWorker作为循环代码。然后,工作人员将“发布”定期的结果。

有关在Swing中并发SwingWorker的更多信息,请参阅Swing教程中关于EDTSwingWorker的部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61424821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档