2009-07-04 1 views

답변

3

한 가지 방법을 도움이

희망은 사용자 정의 문서를 작성하고의 insertString 메소드를 오버라이드 (override)하는 것입니다. 예를 들어 :

class CustomDocument extends PlainDocument { 
    @Override 
    public void insertString(int offset, String string, AttributeSet attributeSet) 
      throws BadLocationException { 
     // Do something here 
     super.insertString(offset, string, attributeSet); 
    } 
} 

이것은 당신이 삽입되고 있는지 확인하고 (super.insertString()를 호출하지 않음으로써)하고자하는 경우이를 거부 할 수 있습니다. 다음을 사용하여이 문서를 적용 할 수 있습니다 :

editorPane.setDocument(new CustomDocument()); 
4

DocumentListener를 사용하여 문서에 대한 변경 사항을 알릴 수 있습니다.

아직 코멘트를 남길 수 없기 때문에 가능한 경우 클래스를 재정의하는 것보다 청취자를 사용하는 것이 좋을 것입니다. 예를 들어 위에 설명 된 PlainDocument를 재정의하는 것과 같습니다.

리스너 방식은 JTextField, JTextArea, JEditorPane 또는 JTextPane에서 작동합니다. 기본적으로 편집기 창은 HTMLDocument를 사용하고 JTextPane은 StyledDocument를 사용합니다. 따라서 PlainDocument를 사용하도록 구성 요소를 강제 실행하여 기능을 잃어 버리고 있습니다.

우려는이 문서에 추가되기 전에 당신이 DocumentEvent 인터페이스에서 DocumentFilter

+0

실제 변경 사항은 어떻게 얻을 수 있습니까? – Geo

+0

각 청취자 메소드와 함께 전달 된'DocumentEvent'에서 필요한 모든 정보를 얻습니다. 여기에는 변경 유형뿐만 아니라 변경이 시작된 문서로의 오프셋이 변경의 길이와 함께 나타납니다. 영향을받는 부분을 알려줍니다. 이벤트 처리 메카니즘은 리스너 메소드가 실행되는 동안 이들 값이 여전히 정확하다는 것을 보장한다 (즉, 문서는 더 이상 변경되지 않을 것이다). – Thomas

2

를 사용한다, 텍스트 편집에 대한 경우에는 getOffset()와 같은 메소드가getLength() 실제 변경 내용을 검색하는 데 사용할 수있는 이 당신에게이 일을