Frage

Ich habe ein Verbundelement, die zunächst ein Label hat. Jetzt rufe ich die darüber verfügen (das Etikett) und ein weiteres Label im gleichen Behälter (Composite Ulme) schaffen, aber ich weiß nicht den neuen Text sehen. Es bringt mich zu fragen, wie ich auf dem Verbundfreigabe neu zu zeichnen, so dass das neue Label (oder jede andere Komponente I schaffen könnte) anstelle der alten machen wird. Hier ist der Code Ich habe (in eine Einheit Test getrennt zur Herstellung eines Verbund neu gezeichnet)

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();
        }
    });

Wie Sie sehen können, habe ich auf dem Verbund neu zeichnen nenne, nachdem ich ein neues Element hinzuzufügen. Außerdem habe ich festgestellt, dass nach dem Aufruf zu entsorgen, testCell.getChildren (). Länge 0 zurück, wie erwartet, und wenn ich ein neues Label zu erstellen, bekomme ich den gleichen Ausdruck 1 zurückzukehren, Verifizieren, dass das neue Element in der Tat wird immer zu seinem übergeordneten Behälter aus Verbundstoff hinzugefügt Bin ich etwas fehlt hier?

War es hilfreich?

Lösung

In der changeText() Funktion, die

  

testCell.redraw();

Zeile ersetzt werden sollte

  

testCell.layout();

Oder, wenn Sie es ändern möchten korrekt sollten Sie verwenden

  

shell.layout();.

Andere Tipps

würde ich sagen, ein Selection auf dem Etikett hinzuzufügen.

.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(final SelectionEvent e) {
        //Change text by Label.setText();
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top