2013-05-15 6 views
2

NetBeans 모듈 용 NavigatorPanel을 구현하려고합니다. 이제 파서를 호출하고 탐색기를 업데이트 할 수 있도록 연결된 DataObject가 수정 될 때마다 항상 알림을 받고 싶습니다.DataObject API를 사용하여 NetBeans에서 파일 내용 변경에 대한 알림을받는 방법

DataObject에 PropertyChangeListener를 추가하려고 시도했지만 문서에 대한 첫 번째 변경 사항 만 알려주므로 그게 전부입니다. 그러나 처음으로 PropertyChangeListener.propertyChange() 메서드가 호출되고 propertyName이 "COOKIE"로 설정되고 두 번째로 "MODIFIED"로 설정되었음을 알았습니다.

에 대한 아이디어는 항상입니다 (기본 FileObject!가 아닌) 편집기에서 문서의 내용이 변경되면 알림을 받습니까?

편집 : 나는 이미 http://wiki.netbeans.org/DevFaqListenForSaveEvents을 보았다. PropertyChangeListener는 문서 저장에 대한 정보 (예 : Ctrl + S)를 얻기 위해 사용되며 콘텐츠 수정에 대한 알림을 받으려면 대신 FileChangeListener를 사용해야한다고 명시합니다. 그러나 그것은 저를 위해 작동하지 않았습니다. 두 경우 모두 PropertyChangeListener를 사용할 때를 제외하고 편집기에서 문서를 수정할 때 알림을받지 못합니다. 그런 다음 알림을받습니다. 처음에는 뭔가를 편집 할 때만 사용할 수 있습니다. 자주하는 질문).

EDIT2 : 아직 제대로 알리는 방법을 찾지 못했습니다. 하지만 필자의 경우 다른 관점에서 실제로 목표에 접근해야합니다. 즉, 구문 분석 결과를 기반으로 NavigatorPanel을 업데이트해야하므로 ParserResultTask를 등록해야합니다. 이를 통해 언제 알림을 받아야하는지 정의 할 수 있으며 알림을 받으면 패널을 업데이트하는 데 필요한 이미 파싱 된 결과를 얻을 수 있습니다.

글쎄,이 질문에 대한 직접적인 대답은 아니지만이 문제에 대한보다 적절한 해결책입니다.

+0

당신은 이미 이것을 보았습니까? http://wiki.netbeans.org/DevFaqListenForSaveEvents – ShaggyInjun

+0

@ShaggyInjun 감사합니다. 편집을 참조하십시오. – bcause

답변

1

다음은 저에게 효과적입니다. 변경 사항을 저장할 때만 이벤트가 시작된다는 사실을 기억하십시오. 간결하게 만들기 위해 코드를 삭제 했으므로 아래의 코드가 제대로 컴파일되지 않을 수 있습니다. 그러나 DataObject에 FileChangeListener를 구현하는 것만 큼 간단합니다. Geertjan은 얼마 전에이 블로그 게시물을했습니다. 어떻게 진행되는지 알려주세요.

https://blogs.oracle.com/geertjan/entry/org_openide_filesystems_filechangelistener

public class YourDataObject extends MultiDataObject implements FileChangeListener { 


    public YourDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException { 
     super(pf, loader); 
     pf.addFileChangeListener(this); 
     registerEditor("text/x-puml", true); 
    } 

    @Override 
    protected int associateLookup() { 
     return 1; 
    } 


    @Override 
    public void fileFolderCreated(FileEvent fe) {} 

    @Override 
    public void fileDataCreated(FileEvent fe) {} 

    @Override 
    public void fileChanged(FileEvent fe) { 
     System.out.println("Here =========== :" + fe); 
    } 

    @Override 
    public void fileDeleted(FileEvent fe) {} 

    @Override 
    public void fileRenamed(FileRenameEvent fre) {} 

    @Override 
    public void fileAttributeChanged(FileAttributeEvent fae) {} 
} 

편집

신경 끄시 고, 난 당신에 FileObject 처리하지 않았다 잊어 버렸습니다. 다음은 넷빈 포럼 게시판입니다.

http://forums.netbeans.org/ptopic7909.html

+0

감사합니다. 가까이에 있었지만 제가 찾고 있던 것이 아닙니다. 그러나 그 길을 따라 나는 무엇인가를 깨달았다. 첫 번째 게시물에서 내 Edit2를 참조하십시오. – bcause