2013-11-20 2 views
1

JTextPane에서 텍스트를 대체하는 걸림돌을 실행 한 것 같습니다. 기존 텍스트를 변경하는 데 필요한 몇 개의 JTextPane이 있습니다. 초기 텍스트를 사용하여이 작업을 수행 할 수 있지만 문서를 변경하기 위해 호출 할 때 전화에서이 변경 내용이 표시되지만 패널이 업데이트되지 않습니다.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를 반환하면 두 도큐멘트 & udoc에 올바른 정보가 포함되어 있습니다 (프로그램을 통해 단계를 밟았으며 케이스 2에서 호출 할 때 문서에 업데이트 된 질문이 표시됨). 그러나 codeTextPane을 업데이트하지 않으며 toolPane는 새로운 패널을로드합니다. repaint() 및 update()를 호출하려고 시도했지만 어느 것도 작동하지 않는 것 같습니다. 내가 놓친 게 있니?

+0

수신기에서이 작업을 수행하지 않았는지 확인하십시오. 예를 들어, 버튼을 눌렀을 때 실행되는 리스너를 설정했지만 리스너에있는 동안 위의 코드를 실행하면 작동하지 않을 수 있습니다. 나는 이것에 대해 100 % 확실하다고 확신하지는 않는다. – ajb

+0

나는 청취자에게서 이것을 부르지 않을 것이다. 나는 청취자로부터 나의 메인 GUI에있는 메소드를 호출한다. 필자는 본질적으로 독립된 모듈을 별도의 클래스로 구축하고 호출 할 때 주 GUI에 표시 할 수 있기를 원했습니다. 나는 이것이 최선의 방법이라고 생각했다. 스타일있는 문서를 모듈에서 작성하여 GUI로 리턴하고 gui가 jtextpane에 표시하도록하십시오. jsplitpane 안에 중첩 된 jscrollpane 안에 jtextpane이 중첩되어 있습니다. 나는 이것을 설정하는 적절한 방법이라고 믿는다. 그러나 일단 텍스트 판에 글을 쓰면 새 문서로 업데이트 할 수 없다. – jbolt

답변

1

repaint() 및 update()를 호출하려고 시도했지만 어느 것도 작동하지 않는 것 같습니다. 내가 놓친 게 있니? 눈에 보이는 GUI에서 구성 요소를 추가 (또는 삭제) 할 때

일반적인 형식은 다음과 같습니다 기본 구성 요소에 의해

panel.add(...); 
panel.revalidate(); 
panel.repaint(); 

는, 제로 크기가 당신이 재 검증이 필요하므로() 레이아웃 매니저를 호출 구성 요소에는 크기가 지정됩니다.

+0

그 중 하나가 작동하지 않는 것 같습니다. 모듈에서 반환 된 새로운 스타일 문서로 doc8을 재 할당하는 대신 완전히 새로운 문서 (doc9)를 만들려고했으나 작동하지 않습니다. 새로운 데이터는 jtextpane에 할당 할 필요가 있지만'codeTextPane.setDocument (doc8); '명령으로 업데이트되지 않습니다. – jbolt

+0

또한 기존 문서를'doc.remove (0, doc.getLength());'기존 텍스트를 지우려면 호출하지만 그 중 하나는 퍼즐의 핵심 부분이 누락 된 것처럼 이상하게 보입니다. pane을 생성하기위한 호출은 'public JTextPane codeTextPane;'이며'codeTextPane = new JTextPane();'으로 생성됩니다. 다른 튜토리얼을 보면 작동하는 것처럼 보입니다. – jbolt

+0

@jbolt, 가장 쉬운 방법은 디자인 타임에 JTextPane을 만드는 것입니다. 그런 다음 텍스트 팬에 대한 참조가있는 한 필요에 따라 문서에 액세스하고 업데이트 할 수 있습니다. 컴포넌트를 동적으로 대체하는 것은 좋은 생각이 아닙니다. – camickr

관련 문제