Переход к Swing
В приложении мы вкратце перечислим аспекты технологии Java, не освещенные в основном тексте книги.
В части 3 мы подробно рассмотрели возможности графической библиотеки AWT. Там же мы заметили, что в состав Java 2 SDK входит еще одна графическая библиотека, Swing, с более широкими возможностями, чем AWT. Фирма SUN настоятельно рекомендует использовать Swing, а не AWT, но, во-первых, Swing требует больше ресурсов, что существенно для российского разработчика, во-вторых, большинство браузеров не имеет в своем составе Swing. В-третьих, удобнее сначала познакомиться с библиотекой AWT, а уже потом изучать Swing.
Все примеры графических программ, приведенные в книге, будут выполняться методами библиотеки Swing после небольшой переделки:
- Добавьте в заголовок строку import javax.swing.*;.
- Поменяйте Frame на JFrame, Applet на JApplet, Component нa JComponent, Panel на JPanel. He расширяйте свои классы от класса canvas, используйте jpanei или другие контейнеры Swing.
- Замените компоненты AWT на близкие к ним компоненты Swing. Чаще всего надо просто приписать букву j: JButton, JcheckBox, JDialog, jList, JMenu и т. д. Закомментируйте временно строку import java.awt.*; и попробуйте откомпилировать программу. Компилятор покажет, какие компоненты требуют замены.
- Включите в конструктор класса, расширяющего JFrame, строку Container с = getContentPane (); и располагайте все компоненты в контейнере с, т. е. пишите c.add(), с.setLayout ().
- Класс jFrame содержит средства закрытия своего окна, надо только настроить их. Вы можете убрать addwindowListener(…) и включить в конструктор обращение К методу setDefaultCloseQperation(JFrame.EXITJB_CLOSE).
- В прямых подклассах класса jpanei замените метод paint () на paintcomponent () и удалите метод update (). Класс jpanei автоматически производит двойную буферизацию и надобности в методе update () больше нет. Уберите весь код двойной буферизации. В начало метода paintcomponent () включите обращение super.paintcomponent (g). Из подклассов классов JFrame, joialog, JAppiet метод paintcomponent () надо переместить в другие компоненты, например, JButton, JLabel, jpanei.
- Используйте вместо класса image класс imageicon. Конструкторы этого класса выполнят необходимое преобразование. Класс imageicon автоматически применяет методы класса MediaTracker для ожидания окончания загрузки.
- При создании апплетов расширением класса JAppiet не забывайте, что в классе Applet менеджером размещения по умолчанию служит класс FiowLayout, а в классе JAppiet менеджер размещения по умолчанию BorderLayout.
Пункты 4 и 6 требуют пояснения. Окно верхнего уровня в Swing, такое как JFrame, содержит корневую панель (root pane), на которой размещена слоеная панель (layered pane). Компоненты на слоеной панели можно размещать несколькими слоями, перекрывая друг друга. В одном из слоев находится панель содержимого (content pane) и строка меню (menu bar). Поверх самого верхнего слоя расположена прозрачная панель (glass pane). Поэтому нельзя просто поместить компонент в окно верхнего уровня. Его надо "положить" на какую-нибудь панель. Пункт 4 рекомендует размещать компоненты на панели содержимого.
Откомпилировав и запустив измененную программу, вы увидите, что ее внешний вид изменился, чаще всего не в лучшую сторону. Теперь надо настроить компоненты Swing. Библиотека Swing предоставляет для этого широчайшие возможности.