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

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

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

Среда: Eclipse Ganymede, Windows XP.

1 Ответ

7 голосов
/ 01 апреля 2009

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

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

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

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

private IWorkbenchAction newWindowAction;

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

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

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

    menu.add(newWindowAction);

где меню, как правило, меню Окно. Если у вас нет меню 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()

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

...