我似乎碰到了一個替代JTextPane中的文本的障礙。我有幾個JTextPanes,我需要更改現有的文本。我可以用初始文本做到這一點,但當我打電話來改變文檔時,我看到了這個改變,但面板不會更新。如何替換JTextPane中的StyledDocument
switch(module.getCurrentQuestionNumber())
{
case 1:
doc = module8.loadQuestion1();
udoc = module8.loadQuestion1();
codeTextPane.setDocument(doc);
uCodeTextPane.setDocument(udoc);
toolPane.add(module.loadQuestion1Panel(outputTextPane));
uToolPane.add(module.loadQuestion1Panel(uOutputTextPane));
break;
case 2:
doc = module8.loadQuestion2();
udoc = module8.loadQuestion2();
codeTextPane.setDocument(doc);
uCodeTextPane.setDocument(udoc);
toolPane.add(module.loadQuestion2Panel(outputTextPane));
uToolPane.add(module.loadQuestion2Panel(uOutputTextPane));
break;
}
當module.getCurrentQuestionNumber()
返回1時,面板加載並且一切按預期工作。當module.getCurrentQuestionNumber()
返回2時,兩個doc & udoc中都有正確的信息(我跨過了程序,當我在情況2中接到調用時,docs顯示更新後的問題),但這不會更新codeTextPane,也不會toolPane加載新面板。我試圖調用repaint()和update(),兩者似乎都不起作用。我錯過了什麼嗎?
確保你沒有從聽衆那裏做這件事。例如,如果你設置了一個'Listener',它在你按下按鈕時執行,但是當你仍然在監聽器中時運行上面的代碼,它可能不起作用。不過,我並不是100%確定我是對的。 – ajb
我不是在一個監聽器中調用它。我從聆聽者的主gu中調用一種方法。基本上我希望能夠在單獨的類中構建獨立模塊,然後讓主GUI在被調用時顯示它們。我認爲這將是最好的方法。我在模塊中創建了樣式化的文檔,將它們返回給gui,並讓gui將它們顯示在jtextpane中。我將jtextpane嵌套在嵌套在jsplitpane內的jscrollpane內。我相信這是設置它的正確方法,但是一旦我寫入文本窗格,我無法使用新文檔更新它。 – jbolt