문제

처음에는 레이블이있는 복합 요소가 있습니다. 이제 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();
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top