Почему в контейнере слишком много слоев?
Кто-нибудь может сказать мне, в чем разница между приведенным ниже кодом
JFrame jf=new JFrame();
JButton jb=new JButton();
jf.add(jb);
а также
JFrame jf=new JFrame();
Container c=jf.getContentPane();
JButton jb=new JButton();
c.add(jb);
Даже я не ясно о RootPane,LayeredPane,GlassPane. Какая польза от RootPane?? Я никогда не использовал это в своем кодировании. Я прочитал это по ссылке ниже
http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html
но не слишком ясно, потому что нет практической ситуации, когда я использовал вышеизложенное. Спасибо за Ваш ответ!!
2 ответа
Оба одинаковы...
Оба добавляются в объект java.awt.Container.
JFrame и Container имеют следующую иерархию
Случай 1: JFrame#add()-> Frame # add () -> Window#add() -> Container#add() // Компонент add в контейнер
Случай 2: JFrame#getContentPane() -> getRootPane(). GetContentPane(); он вернет объект-контейнер (Container # add)
Начиная с Java 5, между примерами кода нет никакой разницы. JFrame#add
теперь перенаправлен на JFrame#getContentPane
от вашего имени.
До Java 5 это создавало исключение, что означало, что вы должны были добавлять свои компоненты непосредственно на панель контента.
JRootPane
используется для создания легковесного контейнера, в который могут быть добавлены другие компоненты Swing. Что еще более важно, он предоставляет средства, с помощью которых контейнеры Swing верхнего уровня могут самоорганизовываться.
JRootPane
сделан из слоев. Внизу находится JMenuBar
и панель содержимого и выше, это стеклянная панель.
Из-за того, как он построен, JRootPane
на самом деле может иметь несколько дополнительных слоев (обычно между панелью содержимого и стеклянной панелью), это обычно используется для таких вещей, как всплывающие окна.
Стеклянная панель действует как наложение, которое может использоваться для визуализации содержимого поверх всего остального (а также для блокировки событий мыши и клавиатуры).
Взгляните на Как использовать Root Panes.
Обычно, кроме панели содержимого и стеклянной панели, вы обычно не используете другие части корневой панели.
Вы также можете взглянуть на это для быстрого примера использования стеклянной панели.