이클립스 플러그인보기 (예 : helloworld-view-plugin-project와 유사)이 있습니다. 보기 파일에서보기를 업데이트하려고 할 때 이벤트가 발생합니다.이클립스 플러그인에서보기를 업데이트/새로 고치는 방법은 무엇입니까?
이보기에는 여러 레이블이있는 그룹에 GridData가 있습니다. 몇 가지 프로그램에 등록하고 그 상태가이 GridData에으로 표시되어야합니다.
편집 : 더 나은 내 문제를 보여주기 위해 나는이 게시물을 업데이트하고 전체 코드 추가 :
CreatePartControl() :
public void createPartControl(Composite _parent) {
parent = _parent;
createContents();
addBindings();
makeActions();
contributeToActionBars();
}
CreateContents() :
를protected void createContents() {
// fixed
checkIcon = //...
errorIcon = //...
smallFont = SWTResourceManager.getFont("Segoe UI", 7, SWT.NORMAL);
// content
gl_shell = new GridLayout(1, false);
//margins, etc. for gl_shell
parent.setLayout(gl_shell);
final Label lblGreeting = new Label(parent, SWT.NONE);
lblGreeting.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1));
lblGreeting.setText("Hi " + Preferences.getPreName());
// -- GROUP YOUR STATS (show all services)
createStatusGroupBox();
}
createStatusGroupBox() :
private Group grpYourStatus = null; // outside the method for access in listener (below)
private void createStatusGroupBox() {
grpYourStatus = new Group(parent, SWT.NONE);
grpYourStatus.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
grpYourStatus.setText("Your upload status");
grpYourStatus.setLayout(new GridLayout(3, false));
// add message if no service is registered
if (r.getServiceList().size() == 0) {
Label status = new Label(grpYourStatus, SWT.NONE);
status.setText("No service registered.");
new Label(grpYourStatus, SWT.NONE); //empty
new Label(grpYourStatus, SWT.NONE); //empty
}
// add labels (status, message, name) for each registered service
for (IRecorderObject service : r.getServiceList()) {
Label name = new Label(grpYourStatus, SWT.NONE);
Label status = new Label(grpYourStatus, SWT.NONE);
Label message = new Label(grpYourStatus, SWT.NONE);
message.setFont(smallFont);
message.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
service.getServiceViewItem().setLabelsAndIcons(name, status, message, checkIcon, errorIcon); //this also sets the values of the labels (label.setText(...) via data binding)
}
불행하게도, 내가 올바른 방법이 재설정/업데이트하는 것입니다 모르겠어요. (보기를 업데이트해야합니다/서비스 목록)
청취자 : 나는 다음과 같은 노력
r.addPropertyChangeListener(BindingNames.SERVICE_ADDED, new PropertyChangeListener() {
public void propertyChange(final PropertyChangeEvent evt) {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
// This "redraws" the view, but just places the whole content (generated in createStatusGroupBox()) above the other parts.
//Display.getCurrent().update();
//createStatusGroupBox();
//parent.layout(true);
//parent.redraw();
// disposes grpYourStatus-Group but doesn't show anything then
grpYourStatus.dispose();
createStatusGroupBox();
grpYourStatus.layout();
grpYourStatus.redraw();
}
});
}
});
가 나는 또한 (개별적으로) 다음 문을 노력을; 모든 성공하지 : 그 위젯이 생성되는 포함 된보기의 라이프 사이클의
createPartControls을하는 시간합니다 (:
parent.redraw(); parent.update(); parent.layout(); parent.layout(true); parent.refresh();
이 post에서 나는 다음을 읽어 보기가 처음에 으로 표시됨). 이 코드는보기 수명 인 주기 동안 한 번만 실행되므로 직접 여기에 아무 것도 추가 할 수 없으므로 보기를 새로 고침하십시오.
이클립스 부품은 일반적으로 워크 벤치 내부에서 변경된 변경 사항에 대한 반응으로 콘텐츠를 업데이트합니다 (예 : 디버그보기의 다른 스택 프레임에서 클릭).
불행하게도, 내가 시도 할 수 내가 검색에 도움이 아무것도 발견하지 않은 다른 사람을 모르겠어요 ... 당신의 도움과 제안에 대한 감사의!
답장을 보내 주신 Andrei에게 감사드립니다. 예, 나는 또한 그것을 시도했습니다 (내 게시물에 추가됨). 다른 제안이 있으십니까? 감사합니다 – casaout
redraw()를 사용하지 않고 layout()을 사용하려고 했습니까? – acostache
불행히도 parent.layout()은 아무 것도 변경하지 않았습니다 ... – casaout