목표 :
JEditorPane 및 HTMLDocuments 작업 이미지 제거, 즉 <img>..</img>
태그로 정의 된 요소에 반응해야합니다.DocumentEvent에서 변경된 내용 가져 오기
내가 시도한 것 :
지금은 DocumentListeners를 사용하여 문서 변경시 발생하는 DocumentEvents에 반응합니다. 불행히도 DocumentEvents에는 변경된 내용에 대한 정보가 직접 포함되어 있지 않으므로 어떤 요소가 제거되었는지 식별 할 수는 없습니다. 내가 할 수있는 일은 문서의 모든 요소를 반복하고 이벤트 getChange (Element)를 호출하는 것입니다. 이 솔루션은 부분적으로 작동하지만
document.addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent arg0) {
ElementIterator iter = new ElementIterator(document);
Element element;
while ((element=iter.next()) != null) {
ElementChange change = arg0.getChange(element);
if (change != null) {
Element[] children = change.getChildrenRemoved();
for (Element child : children) {
Object name = child.getAttributes().getAttribute(StyleConstants.NameAttribute);
System.out.println((HTML.Tag)name);
}
}
}
notifyContentChanged();
}
});
}
내가 다른 솔루션을 정말 감사하겠습니다 (이미지를 삭제할 때 때때로 SYSOUT는 p-implied
대신 img
의보고). 아마, 누군가가 문서의 변경과 관련된 String
을 얻는 간단한 방법을 알고있을 것입니까?
허용 대답에 따르면 SOLUTION
다음 코드 (이 경우에는 화상을 제거하기위한) 수신기로서 DocumentFilters의 사용을 보여준다.
document.setDocumentFilter(new DocumentFilter() {
@Override
public void remove(FilterBypass fb, int offset, int length)
throws BadLocationException {
if (document.getCharacterElement(offset).getName().equals(HTML.Tag.IMG.toString())) {
.
.
}
super.remove(fb, offset, length);
}
});
불행히도, 위의 청취자의 컨텍스트에서는 도움이되지 않습니다. HTMLDocument의 기본 구현은 문서에 대한 변경이 수행 된 후에 ** 수신기를 호출합니다. 즉, 내용 문자열'test'에서'e'를 삭제하고 오프셋/길이를 보면'e' 대신's'를 가리 킵니다. – Johnson
그런 다음 remove()를 재정 의하여 DocumentFilter를 추가하고이를 리스너로 사용하여 삭제 된 부분을 가져올 수 있습니다. – StanislavL
최근에 SWT와 많은 관계를 맺고있는 나에게 수치 스러웠다. 기존의 Listener 인터페이스를 사용하는 데 너무 집중하게 된 것 같다. 나는 이미 DocumentFilters를 사용하는 것에 대해 생각해 보았지만이 경로를 따르지 않았다. 사실, 제 경우에는 다소 "단선"입니다. 당신이 당신의 코멘트에 대한 조언을 당신의 대답에 추가하거나 그것으로 새로운 대답을 만들려면 나는 대답을 받아 드리고 싶습니다, 감사합니다. – Johnson