【问题标题】:Quirk with my text editor app and DocumentListener使用我的文本编辑器应用程序和 DocumentListener
【发布时间】:2015-05-20 13:28:03
【问题描述】:

我有一个 JTabbedPane。我基于具有 JTextPane 信息的类(此处称为 textWrap)的实例化添加选项卡。我创建了一个新的侦听器实例并将其传递给 textWrap 的实例化:

tabEditorPane.addTab( fileName, new TextEditorWrap( new MyDocumentListener() ... ...);

当文件更改时,我的 DocumentListener 会在选项卡上添加一个星号。在我尝试将现有文件加载到文本选项卡之前,这一切似乎都很好。侦听器注册初始 BufferedReader 输入并添加一个星号。我该如何解决这个问题?

这件事有经验法则吗?我意识到我可以在创建类之后注册监听器,在加载文本文件之后,但我想看看堆栈说什么。

【问题讨论】:

  • 如果我是你,我会在文档侦听器和星号创建之间添加一个中间件。假设是 AsteriskListener。这个新的监听器将监听两件事:在修改发生时添加星号,或者在加载文件时删除星号。
  • 应该从文档监听器中调用吗?这就是我所拥有的。我似乎想不出一种方法来阻止 dl 在文档的初始加载时调用星号方法
  • I realize I could register the listener after the class is created, as to after the text file is loaded, - 这就是我会做的。

标签: java swing jtextpane jtabbedpane documentlistener


【解决方案1】:

当你加载文件时,应该有一个类似的调用

myTextPane.getEditorKit().read(...);

或任何等效的加载方法。 你可以做的是用 4 个步骤替换这一行:

  1. 删除或停用您的文档侦听器
  2. 加载您的文件
  3. 去掉星号
  4. 放回或重新激活文档侦听器。

为此,例如,您可以扩展您的文本窗格并编写一个 load 方法来执行这 4 个步骤。无论如何,将管理文件加载的对象将需要对您的 DocumentListener 的引用

【讨论】:

  • 感谢您的回答。我决定在创建类后添加文档侦听器,我认为您的解决方案会起作用。实际上,出于某种原因,我可能会实施它。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 2012-11-15
  • 2010-10-19
  • 1970-01-01
相关资源
最近更新 更多