Один рабочий стол 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()
Затем вы можете привести его к любому классу, который вы используете в качестве входного окна.