org.eclipse.swt.widgets.Composite setSize не работает должным образом - PullRequest
0 голосов
/ 18 января 2020

В настоящее время я разрабатываю собственный плагин, и я не совсем понимаю, почему элемент Composite занимает все пространство, даже если присутствуют другие элементы Composite.

Мой обработчик для выполнения плагина выглядит следующим образом this:

public class IwokGeneratorHandler extends AbstractHandler {

    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {

        IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
        Shell shell = window.getShell();
        ApplicationWindow win = new ApplicationWindow(shell) {

            @Override
            protected Control createContents(Composite parent) {

                parent.setSize(800, 600);
                //first panel
                Composite composite = new Composite(parent, SWT.NONE);
                //x, y, width, height
                composite.setBounds(10, 10, 424, 70);

                //second panel
                Composite composite_1 = new Composite(parent, SWT.NONE);
                composite_1.setBounds(10, 86, 424, 309);

                //third panel
                Composite composite_2 = new Composite(parent, SWT.NONE);
                composite_2.setBounds(10, 407, 424, 42);

                return parent;
            }
        };
        win.open();
        return null;
    }
}

Однако первый Composite занимает все пространство основного окна приложения, а остальные не видны, независимо от размера окна. Я проверял это несколько раз.

Есть ли какое-либо свойство, которое мне не хватает, чтобы предотвратить элементы для автоматического заполнения?

Заранее спасибо

1 Ответ

2 голосов
/ 18 января 2020

ApplicationWindow ожидает, что метод createContents вернет один Composite, содержащий все элементы управления в контенте (как и большинство других классов окон и диалогов JFace).

Так что-то вроде:

  protected Control createContents(final Composite parent) {

      parent.setSize(800, 600);

      // Main body composite
      Composite body = new Composite(parent, SWT.NONE);

      //first panel
      Composite composite = new Composite(body, SWT.NONE);
      //x, y, width, height
      composite.setBounds(10, 10, 424, 70);

      //second panel
      Composite composite_1 = new Composite(body, SWT.NONE);
      composite_1.setBounds(10, 86, 424, 309);

      //third panel
      Composite composite_2 = new Composite(body, SWT.NONE);
      composite_2.setBounds(10, 407, 424, 42);

      // Return the body
      return body;
  }

Обратите внимание, что ваш код также возвращает parent, что неверно - это должен быть созданный композит.

Примечание. Хотя использование setBounds может показаться простым, запуск с ним приведет к проблемы, если код работает на разных компьютерах с разными размерами шрифта (или размером управления, если вы работаете в macOS / Linux / Windows). Настоятельно рекомендуется использовать макеты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...