CTabFolder가 지원하는 org.eclipse.ui.part.MultiPageEditorPart와 작동하는 해결 방법이 있습니다. 직선적 인 CTabFolder 구현을 위해이를 적용 할 것입니다.
tabFolder.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
pageChange(tabFolder.indexOf((CTabItem) e.item));
}
});
그런 다음 나는이 같은 pageChange()를 구현 : canChangePages에서
protected void pageChange(int newPageIndex) {
boolean changingPages = this.changingPages;
this.changingPages = true;
int oldPageIndex = tabFolder.getSelectionIndex();
if (isDirty() && !changingPages) {
tabFolder.setSelection(oldPageIndex);
if (canChangePages()) {
tabFolder.setSelection(newPageIndex);
}
}
this.changingPages = false;
}
() 나는 당신이 대화 저장하고주고 싶어 팝업
첫째는 선택 리스너를 사용 사용자는 예, 아니오 또는 취소를 선택할 수 있습니다. 예는 정보를 저장하고 true를 반환합니다. No는 정보를 마지막으로 저장된 상태로 되돌리고 true를 반환합니다. 취소하면 false가 반환됩니다. 단순히 저장을 시도하고 저장이 실패 할 경우에만 false를 반환 할 수 있습니다.
canChangePages()를 호출하기 전에 이전 페이지로 다시 전환하는 것이 이상하게 보일 수 있습니다. 이 호출은 신속하게 실행되므로 탭이 절대로 전환되지 않았다는 환상을 제공합니다. canChangePages()가 사용자에게 걸리는 시간이 아무리 길어도 그 방법으로 승인되지 않는 한 탭 변경 사항이 표시되지 않습니다.
나는 CTabFolders와 Trees 모두에 대해 동일한 해결 방법을 생각해 냈습니다 :) 나는 약간의 깜박임을 예상했지만 아무 것도 보지 못했습니다. 그리고 운좋게도 CTabFolder는 실제로 탭을 닫기 전에 이벤트를 시작합니다. –
2015 년 현재,''tabFolder.getSelectionIndex()''는 항상''tabFolder.indexOf ((CTabItem) e.item)와 같은 값을 리턴합니다. '. 그래서''newPageIndex''는''SelectionListener'' 안에서 항상''oldPageIndex''와 같습니다. 누군가가 이와 관련하여 어려움을 겪고 있다면이 문제를 극복하기 위해 이전 페이지 색인을 유지하십시오. – user1438038