Приложение Eclipse RCP - многооконный дизайн для нескольких мониторов

Вопрос о Eclipse RCP и целом дизайне перспективы / вида / редактора - каков наилучший способ создания приложения, которое будет отображать несколько окон на нескольких мониторах? Учебники и книги, которые я видел, всегда упаковывают дизайн RCP/SWT в представления внутри перспективы в одном окне приложения.

Должно ли одно окно управлять всеми остальными, или все они должны быть равны (закрытие последнего выхода из приложения)? Как справиться с перспективами и взглядами? Есть ли что-то еще, что мы должны знать?

Окружение: Eclipse Ganymede, Windows XP.

1 ответ

Решение

Один рабочий стол Eclipse может создавать несколько окон. Каждое окно спроектировано с использованием перспективы, поэтому для разных окон можно установить разные перспективы или одну и ту же перспективу, и вы можете переключать перспективы в каждом окне независимо от других окон.

Вы также можете установить ввод для каждого окна. Это полезно, если каждое окно работает с разными данными (например, каждое окно может быть подключено к другому серверу или может отображать данные из разных баз данных, которые имеют одинаковую схему, но разные данные).

Может случиться так, что вы используете только окна, чтобы вы могли видеть разные перспективы одних и тех же данных на разных мониторах. В этом случае вам не нужно программно создавать окна, а нужно только добавить действие, предоставляемое верстаком. Это можно сделать, изменив класс ActionBarAdvisor:

добавить к полям объявлений:

private IWorkbenchAction newWindowAction;

добавьте в код, где вы делаете действия (обычно это метод с именем makeActions):

    newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window);
    register(newWindowAction);

добавьте в код, где вы создаете меню:

    menu.add(newWindowAction);

где menu - это, как правило, меню Window. Если у вас нет меню Window в вашем приложении и вы хотите его создать, будет работать следующая строка:

    MenuManager menu = new MenuManager(
      "&Window", 
      IWorkbenchActionConstants.M_WINDOW);

Это даст вам пункт меню, который создаст новое окно так же, как пункт меню Window->New Window в Eclipse IDE.

Если, с другой стороны, вы хотите, чтобы каждое окно отображало разные данные, то вам нужно будет открывать новые окна программно. Это позволяет вам установить разные входные данные для каждого окна. Вам понадобится строка кода, например:

IWorkbenchPage newPage = window.openPage(inputObject);

где inputObject содержит информацию, которая идентифицирует данные, отображаемые в окне. Если вы хотите установить начальную перспективу, это можно сделать, вызвав setPerspective на странице.

Вы хотите установить заголовок в каждом окне:

newPage.getWorkbenchWindow().getShell().setText(windowTitle);

где windowTitle - строка, описывающая ввод в окно.

Вы можете получить входные данные для окна следующим образом:

window.getActivePage().getInput()

Затем вы можете привести это к любому классу, который вы используете в качестве входного окна.

Другие вопросы по тегам