SWT composite - problem przerysowania
Mam element złożony, który początkowo ma etykietę. Teraz dzwonię do dispose na nim (etykieta) i tworzę kolejną etykietę w tym samym pojemniku (wiąz elm), ale nie widzę nowego tekstu. Daje mi to pytanie, jak włączyć przerysowywanie w kompozycie, aby nowa etykieta (lub jakikolwiek inny komponent, który mogłem utworzyć) była renderowana w miejsce starej. Oto kod, który mam (podzielony na test jednostkowy do przerysowania kompozytu)
<code>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(); } }); </code>
Jak widać, wywołuję przerysowanie na kompozycie po dodaniu nowego elementu. Sprawdziłem również, że po wywołaniu dispose, testCell.getChildren (). Length zwraca 0, zgodnie z oczekiwaniami, a kiedy tworzę nową etykietę, otrzymuję to samo wyrażenie, które zwraca 1, sprawdzając, czy nowy element rzeczywiście się dostaje dodany do macierzystego kontenera kompozytowego Czy czegoś tu brakuje?