Скрывать вместо удаления видовой части при нажатии кнопки x - PullRequest
2 голосов
/ 01 июля 2011

У меня есть область просмотра с закрываемым значением true. Пользователь нажимает х. Я хочу скрыть часть окна, а не закрывать ее. как это можно сделать?

Ответы [ 4 ]

1 голос
/ 27 января 2012

Это возможно, но это сложно!

Закрытие представления фактически «скрывает» его с текущей точки зрения.Если представление нигде не отображается, оно удаляется.

Вы можете проверить это, добавив две перспективы в ваше приложение RCP, включая одну и ту же точку зрения в обеих.Теперь закрытие вашего вида в перспективе A не будет утилизировать его, потому что он все еще открыт в перспективе B.

Поэтому, чтобы избежать удаления вида, вам нужно просто убедиться, что он включен в другую перспективу.Если ваше приложение RCP не использует перспективы, вы можете использовать «скрытую» перспективу, которая никогда не отображается, но в которой вы храните все «скрытые» виды, чтобы они не удалялись.

См. Также Какзакрыть ViewPart в Eclipse? , где запрашивается обратное.

0 голосов
/ 02 июля 2011

Насколько мне известно, это вообще невозможно. По сути, часть рабочей среды совместно используется всеми перспективами окна рабочей среды, в котором есть редактор или представление «открыто». Поэтому, когда вы переключаете перспективу, размер Composite детали просто изменяется, чтобы соответствовать новому сайту презентации, где деталь должна быть показана.

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

0 голосов
/ 06 июля 2011

Если ваше приложение было создано из шаблона, который вносит вклад в пользовательский интерфейс, оно должно иметь файл WorkbenchWindowAdvisor в одном из предварительно созданных пакетов. Не уверен в точных деталях реализации, чтобы скрыть окно при закрытии, но похоже, что вам нужно будет изменить метод preWindowShellClose в реализации WorkbenchWindowAdvisor вашего приложения.

0 голосов
/ 02 июля 2011

Вы можете попробовать это:

shell.addShellListener(new ShellListener() {
            public void shellIconified(ShellEvent e) {
            }
            public void shellDeiconified(ShellEvent e) {
            }
            public void shellDeactivated(ShellEvent e) {
            }
            public void shellClosed(ShellEvent e) {
                shell.setVisible(false);
                e.doit = false;
            }
            public void shellActivated(ShellEvent e) {
            }
        });

Где shell - непосредственная родительская оболочка Viewpart. Главное, на что следует обратить внимание - это e.doit=false, который, по сути, сводит на нет событие закрытия.

...