SWT 복합재 - 다시 그리기 문제
-
06-07-2019 - |
문제
처음에는 레이블이있는 복합 요소가 있습니다. 이제 IT (라벨)에 dispose를 호출하고 같은 컨테이너 (합성 Elm)에 다른 레이블을 만듭니다. 그러나 새 텍스트는 보이지 않습니다. 복합재에서 Redraw를 활성화하는 방법에 의문을 제기하여 새 레이블 (또는 내가 생성 할 수있는 다른 구성 요소)이 이전 레이블 대신 렌더링되도록합니다. 다음은 내가 가지고있는 코드입니다 (복합재를 Redraw에 대한 단위 테스트로 분리).
private Label createLabel( Composite parent) {
Label label = new Label(parent, SWT.NONE);
label.setAlignment(SWT.CENTER);
label.setLayoutData( new GridData( SWT.CENTER, SWT.CENTER, true, true) );
return label;
}
private void changeText() {
assert testCell != null : "Please initialize test cell";
testCell.getChildren()[0].dispose();
Label l = createLabel(testCell);
l.setText("New TexT");
testCell.redraw();
}
private void draw() {
Display display = new Display();
shell = new Shell(display);
shell.setLayout(new GridLayout(2,false));
testCell = new Composite(shell,SWT.BORDER);
testCell.setLayout(new GridLayout());
Label l = createLabel(testCell);
l.setText("Old Text");
Composite btnCell = new Composite(shell,SWT.NONE);
btnCell.setLayout(new GridLayout());
Button b = new Button(btnCell, SWT.PUSH);
b.setText("Change");
b.addListener(SWT.MouseDown, new Listener() {
public void handleEvent(Event e) {
changeText();
}
});
보시다시피, 새 요소를 추가 한 후 복합재에서 Redraw를 호출하고 있습니다. 또한, 처분하라는 호출 후, testcell.getchildren (). 길이가 0을 반환하고 예상대로 0을 반환하고 새 레이블을 만들 때 1을 반환하는 동일한 표현식을 가져 와서 새 요소가 실제로 얻는 것을 확인하는지 확인했습니다. 부모 컴포지트 컨테이너에 추가되어 여기에 뭔가 누락 되었습니까?
해결책
에서 changeText()
기능,
testCell.redraw();
라인을 대체해야합니다
testCell.layout();
또는 올바르게 크기를 조정하려면 사용해야합니다.
shell.layout();
.
다른 팁
레이블에 선택 리스트너를 추가한다고 말합니다.
.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
//Change text by Label.setText();
}
}
제휴하지 않습니다 StackOverflow