Как заменить содержимое ячейки сетки в SWT GridLayout? - PullRequest
6 голосов
/ 05 октября 2011

Мне нужно заменить содержимое ячейки сетки после нажатия кнопки.Например: есть Метка, и мне нужно заменить ее на Текст.Это возможно с GridLayout?Мне нужно использовать SWT.

1 Ответ

8 голосов
/ 05 октября 2011

Вы можете просто утилизировать Label и поставить на его место новый Text.GridLayout использует z-порядок дочерних элементов для определения местоположения в сетке, поэтому вам нужно использовать moveAbove() и moveBelow() на Text, чтобы получить его в правильном месте.Затем позвоните layout() на родителя.Например:

Text text = new Text(label.getParent(), SWT.BORDER);
text.moveAbove(label);
label.dispose();
text.getParent().layout();

Вот простой виджет, который точно показывает, что я имею в виду:

public class ReplaceWidgetComposite
    extends Composite
{
    private Label label;
    private Text text;
    private Button button;

    public ReplaceWidgetComposite(Composite parent, int style)
    {
        super(parent, style);

        setLayout(new GridLayout(1, false));

        label = new Label(this, SWT.NONE);
        label.setText("This is a label!");

        button = new Button(this, SWT.PUSH);
        button.setText("Press me to change");
        button.addSelectionListener(new SelectionAdapter()
        {
            public void widgetSelected(SelectionEvent e)
            {
                text = new Text(ReplaceWidgetComposite.this, SWT.BORDER);
                text.setText("Now it's a text!");
                text.moveAbove(label);
                label.dispose();
                button.dispose();
                ReplaceWidgetComposite.this.layout(true);
            }
        });
    }
}
...