Скрыть вместо удаления видовую часть при нажатии x

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


person zachary    schedule 01.07.2011    source источник


Ответы (4)


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

person Adam Green    schedule 06.07.2011

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

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

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

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

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

person parasietje    schedule 27.01.2012

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

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, который по существу сводит на нет событие закрытия.

person Favonius    schedule 02.07.2011
comment
Это было бы верно, если бы viewpart размещался непосредственно в оболочке, что обычно не так в Eclipse... - person Tonny Madsen; 02.07.2011

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

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

person Tonny Madsen    schedule 02.07.2011