【问题标题】:Method writing to JTextArea写入 JTextArea 的方法
【发布时间】:2012-02-06 11:40:09
【问题描述】:

目前我有一种方法,它使用字符串缓冲区在运行时写出字符串。然后该方法返回此字符串,然后我将其显示在JTextArea 中。是否有另一种方法可以做到这一点,以便在方法运行时将字符串写入文本区域,而不是在完成后写入。谢谢。

【问题讨论】:

    标签: java swing jtextarea stringbuffer


    【解决方案1】:

    您可以将javax.swing.text.Document 参数添加到写入字符串缓冲区的方法中。然后在调用方法时,传入JTextArea.getDocument() 的值——这个对象代表JTextArea 中的文本。

    然后每次将文本附加到字符串缓冲区时,也将其附加到Document,如下所示:

    document.insertString(document.getLength(), stringToAppend, null);
    

    请注意,这可能会使您现有的字符串缓冲区变得多余...实际上您正在使用Document 对象作为字符串缓冲区。另请注意,您可以打赌这种技术会比在显示之前将字符串缓冲区全部写出要慢得多。

    【讨论】:

    • 谢谢,效果很好。我被教导的是我应该使用事件调度程序线程来管理 GUI。这是否违背了这一点,如果是的话,有没有办法我可以改变它以使其符合?
    • 刚刚发现它是事件调度线程,我不知道为什么考虑到它在动作事件区域之外运行,除非是因为它从那里开始?
    • 你是对的,一般来说你应该确保像这样的长时间运行的任务应该在一个单独的线程上,这样 UI 在运行时就不会锁定。但据我了解,许多 Swing 方法会自动将事情委托给该事件调度线程......如果是这种情况,那么您可能不需要更改任何内容。但是,如果您的 UI 被锁定,那么请考虑使用 SwingWorker 而不是 Document — 请参阅 docs.oracle.com/javase/tutorial/uiswing/concurrency/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 2013-04-09
    • 2012-05-18
    • 2011-11-30
    • 1970-01-01
    相关资源
    最近更新 更多