Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每次我希望清除一个DefaultStyledDocument并重新开始时,构建一个新的DefaultStyledDocument是否是一种糟糕的形式?_Java_Swing_Jtextpane - Fatal编程技术网

Java 每次我希望清除一个DefaultStyledDocument并重新开始时,构建一个新的DefaultStyledDocument是否是一种糟糕的形式?

Java 每次我希望清除一个DefaultStyledDocument并重新开始时,构建一个新的DefaultStyledDocument是否是一种糟糕的形式?,java,swing,jtextpane,Java,Swing,Jtextpane,我的程序最终从一个JTextPane(a)获取StyledDocument对象,并将其传递给另一个JTextPane(B)。当我通过后,我希望JTextPane(A)没有文本和任何格式,基本上是对象的新版本,具有默认的JTextPane设置。为此,我目前正在做如下工作: //make things JTextPane inputField = new JTextPane(); JTextPane outputField = new JTextPane(); //move inputField

我的程序最终从一个
JTextPane
(a)获取
StyledDocument
对象,并将其传递给另一个
JTextPane
(B)。当我通过后,我希望
JTextPane
(A)没有文本和任何格式,基本上是对象的新版本,具有默认的
JTextPane
设置。为此,我目前正在做如下工作:

//make things
JTextPane inputField = new JTextPane();
JTextPane outputField = new JTextPane();

//move inputField text (with formatting) from inputField to outputField
StyledDocument doc = inputField.getStyledDocument();
EditorKit kit = inputField.getEditorKit();
outputField.setStyledDocument(doc);
outputField.setEditorKit(kit);
outputField.revalidate();

//reset the inputField so that it's fresh and ready for new input
inputField.setStyledDocument(new DefaultStyledDocument());
inputField.setEditorKit(new StyledEditorKit());

我意识到在这个例子中,我没有移动任何文本或格式(只是一个空白的文档对象),但这些都是我正在执行的操作,我想知道“更新”工具包和文档是否是将我的
JTextPane
重置为默认设置的惰性方式。提前谢谢

IMHO创建一个新的文档实例是绝对正确的。实际上,它更快,因为侦听器不更新视图以反映空的
文档
,然后是新的
文档的内容


顺便说一句:如果是同一类,则无需重置套件。调用
setDocument()
就足够了,因为创建一个新的document实例绝对没有问题。实际上,它更快,因为侦听器不更新视图以反映空的
文档
,然后是新的
文档的内容


顺便说一句:如果是同一类,则无需重置套件。调用
setDocument()

就足够了。最好重用现有对象,而不是创建新对象。@RafaelOsipov:你为什么这么说?我看卢卡斯的计划没有错。这段代码似乎在任何时候都不是他的项目的内存关键部分,当需要内存时,旧文档可能会被GC删除。我知道最好在更新之前重用,但这种情况下我不能简单地重用。如果我这样做,我的JTextPane A和B都将引用相同的文档对象。对一个JTextPane文档的更改将反映在另一个JTextPane文档中,因为它们是相同的文档。我很想知道,这种确保避免这种并发的方法是否是一种糟糕的形式。谢谢你的时间。我没有说卢卡斯的计划是错误的。它会起作用的。但在复杂的应用程序中,最好重用现有对象。GC可以清除未使用的对象引用,但当我们可以重用现有对象时,不创建不必要的对象是一个好的做法。您有没有关于如何在不让两个JTextPane都引用它的情况下重用旧文档对象的提示?当然,我不喜欢在可以避免的情况下使用“新”对象。最好是重用现有对象,而不是创建新对象。@RafaelOsipov:你为什么这么说?我看卢卡斯的计划没有错。这段代码似乎在任何时候都不是他的项目的内存关键部分,当需要内存时,旧文档可能会被GC删除。我知道最好在更新之前重用,但这种情况下我不能简单地重用。如果我这样做,我的JTextPane A和B都将引用相同的文档对象。对一个JTextPane文档的更改将反映在另一个JTextPane文档中,因为它们是相同的文档。我很想知道,这种确保避免这种并发的方法是否是一种糟糕的形式。谢谢你的时间。我没有说卢卡斯的计划是错误的。它会起作用的。但在复杂的应用程序中,最好重用现有对象。GC可以清除未使用的对象引用,但当我们可以重用现有对象时,不创建不必要的对象是一个好的做法。您有没有关于如何在不让两个JTextPane都引用它的情况下重用旧文档对象的提示?当然,我不喜欢在可以避免的情况下使用“新”对象。我会继续使用我一直在做的事情,调整到不重置工具包。关于听众的好信息,谢谢。我会继续我一直在做的事情,调整到不重置工具包。关于听众的好消息,谢谢。