Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Портянкин И. Swing

.pdf
Скачиваний:
140
Добавлен:
07.10.2020
Размер:
4.63 Mб
Скачать

Иван Портянкин

Swing: Эффектные пользовательские интерфейсы

Издательство «Лори»

Swing: Эффектные пользовательские интерфейсы

издание 2-ое

Иван Портянкин

Верстка Глазова Т.

Издательство “Лори”, 2011

Изд. № : OAI (03)

ЛР № : 07612 30.09.97 г. ISBN 978-5-85582-305-9

Подписано в печать 20.09.2011 Формат 70 x 100/16 Бумага газетная Гарнитура Баскервиль Печать офсетная Печ. л. 24.5 Тираж 1000 Заказ № Цена договорная

Издательство “Лори” 123100, Москва, Шмитовский пер., д. 13/6, стр. 1 (пом. ТАРП ЦАО)

телефон для оптовых покупателей; (499)2560983 размещение рекламы; (499)2590162 www.lory-press.ru

Отпечатано в типографии ООО “Тиль-2004” Москва, ул. Электрозаводская д. 21

Содержание

 

Введение..............................................................................................................

ix

Глава 1. Основные концепции ..........................................................................

1

В начале было... AWT.................................................................................

2

Компоненты Swing — это легковесные компоненты AWT .........................

5

Совместное использование компонентов AWT и Swing ............................

7

Архитектура JavaBeans..............................................................................

8

Соглашение об именах.................................................................................

9

Расширенные возможности .......................................................................

11

Привязанные свойства........................................................................

11

Ограниченные свойства......................................................................

11

Индексированные свойства ................................................................

12

Редакторы свойств.............................................................................

12

Описание компонента .........................................................................

12

Постоянство........................................................................................

13

Компоненты Swing — это компоненты JavaBeans ...................................

13

Подключаемые внешний вид и поведение.............................................

14

Архитектура MVC........................................................................................

15

Все ли так хорошо в MVC?.........................................................................

18

Решение Swing — представители пользовательского интерфейса........

19

Как все работает.........................................................................................

20

Управление внешним видом и поведением программы..........................

21

Специальные средства для пользователей с ограниченными

 

возможностями.........................................................................................

25

Локализация приложений........................................................................

26

Резюме ........................................................................................................................

26

Глава 2. Модель событий.................................................................................

27

Наблюдатели ............................................................................................

28

Слушатели ................................................................................................

29

Схема именования событий JavaBeans .................................................

32

Стандартные события..............................................................................

33

Техника написания слушателей..............................................................

37

Адаптеры.....................................................................................................

38

Каждому событию — по слушателю..........................................................

39

Внутренние классы..............................................................................

40

Быстро и грязно...................................................................................

42

Диспетчеризация ........................................................................................

43

Проблема висячих ссылок .........................................................................

46

Создание собственных событий .............................................................

47

Список EventListenerList .............................................................................

52

События от мыши и волшебный метод contains()..................................

53

Резюме ......................................................................................................

55

Глава 3. За кулисами системы обработки событий....................................

56

Поток EventDispatchThread и очередь событий EventQueue...................

56

Доставка событий методам processXXXEvent() .......................................

58

IV

 

Содержание

 

Маскирование и поглощение событий......................................................

62

 

Работа с очередью событий ......................................................................

67

 

Влияние на программы потока EventDispatchThread...............................

68

 

Отзывчивость программы и SwingWorker .................................................

73

 

Почему мы так запускаем Swing-приложения..........................................

75

 

Отладка потоков в системе событий......................................................

78

 

Резюме ......................................................................................................

79

Глава 4.

Рисование в Swing ...........................................................................

80

 

Система рисования..................................................................................

80

 

Метод paint() — резюме..............................................................................

83

 

Метод repaint() — пара дополнений..........................................................

84

 

Рисование легковесных компонентов.......................................................

84

 

Легковесные компоненты: резюме............................................................

89

 

Система рисования Swing .......................................................................

89

 

Кэширование...............................................................................................

90

 

Разделение обязанностей..........................................................................

91

 

Метод paintComponent() .............................................................................

91

 

Метод paintBorder() .....................................................................................

92

 

Метод paintChildren()...................................................................................

93

 

Общая диаграмма рисования в Swing ......................................................

94

 

Программная перерисовка в Swing...........................................................

95

 

Рисование в Swing: резюме......................................................................

96

 

Рисование «готовых» компонентов...........................................................

96

 

Рисование вне рамок...............................................................................

99

 

RepaintManager как прикладной инструмент .........................................

99

 

Отладка графики....................................................................................

102

 

Резюме ....................................................................................................

105

Глава 5.

Внутренние винтики Swing ...........................................................

106

 

Проверка корректности компонентов...................................................

106

 

Метод Swing: revalidate() ..........................................................................

108

 

Проверка корректности в Swing: резюме................................................

110

 

Клавиатурные сокращения.....................................................................

111

 

Класс KeyStroke ........................................................................................

111

 

Карты входных событий и команд...........................................................

112

 

Методы поддержки клавиатурных сокращений......................................

113

 

Система передачи фокуса ввода..........................................................

116

 

Настройка системы передачи фокуса.....................................................

117

 

Расширенные возможности .....................................................................

120

 

Всплывающие подсказки и клиентские свойства.................................

121

 

Резюме ....................................................................................................

122

Глава 6. Контейнеры высшего уровня ........................................................

123

 

Корневая панель JRootPane..................................................................

123

 

Многослойная панель JLayeredPane.......................................................

124

 

Панель содержимого................................................................................

129

 

Строка меню..............................................................................................

130

 

Прозрачная панель...................................................................................

131

 

Корневая панель — итог ..........................................................................

136

 

Расширение границ — J(X)Layer .............................................................

139

 

Окна Swing ..............................................................................................

142

Окно без рамки JWindow ..........................................................................

142

Содержание

V

Окно с рамкой JFrame ..............................................................................

145

События окон............................................................................................

146

Диалоговое окно JDialog ..........................................................................

147

Специальное оформление окон..............................................................

150

Прозрачность и произвольные формы ...................................................

152

Кратко об апплетах — класс JApplet.....................................................

154

Многооконное окружение.......................................................................

156

Внутренние окна JInternalFrame ..............................................................

159

Резюме ....................................................................................................

160

Глава 7. Искусство расположения................................................................

161

Как работает менеджер расположения ................................................

162

Стандартные менеджеры расположения.............................................

167

Полярное расположение BorderLayout ...................................................

167

Последовательное расположение FlowLayout .......................................

169

Табличное расположение GridLayout ......................................................

171

Динамические вкладки и CardLayout.......................................................

174

Менеджер расположения SpringLayout...................................................

174

Абсолютное расположение......................................................................

176

Вложенные расположения.......................................................................

176

Блочное расположение BoxLayout ..........................................................

177

Расстояние между компонентами...................................................

180

Проблема с распорками.....................................................................

186

Выравнивание компонентов по осям...............................................

187

Расположение по группам: GroupLayout .................................................

191

Гибкая сетка: GridBagLayout ....................................................................

191

Быстрый язык MigLayout........................................................................

198

Общий подход.........................................................................................

200

Рекомендации от Sun ...............................................................................

202

Рекомендации по расположению и класс LayoutStyle ...........................

203

Реализация в коде: вложенные блоки.....................................................

204

Реализация: гибкая сетка.........................................................................

211

Резюме ....................................................................................................

212

Глава 8. Вывод вспомогательной информации.......................................

213

Надписи JLabel .......................................................................................

213

Значки Icon ................................................................................................

216

Использование HTML ...............................................................................

218

Надписи и события...................................................................................

220

Надписи и мнемоники...............................................................................

220

Всплывающие подсказки.......................................................................

222

Настройка подсказок ................................................................................

225

Рамки.......................................................................................................

227

Фабрика BorderFactory .............................................................................

231

Создание собственных рамок..................................................................

232

Рамки и разработка собственных компонентов .....................................

236

Резюме ....................................................................................................

238

Глава 9. Элементы управления.....................................................................

239

Кнопки JButton ........................................................................................

239

Внешний вид кнопок .................................................................................

239

У кнопок есть модель................................................................................

244

Обработка событий от кнопок..................................................................

245

VI

Содержание

Мнемоники.................................................................................................

248

Интерфейс Action......................................................................................

251

Элементы управления с двумя состояниями.......................................

253

Выключатели JToggleButton .....................................................................

253

Группы элементов управления ButtonGroup...........................................

255

Переключатели JRadioButton...................................................................

257

Флажки JCheckBox....................................................................................

259

Дополнительные значки...........................................................................

260

Резюме ....................................................................................................

261

Глава 10. Меню и панели инструментов......................................................

262

Меню........................................................................................................

262

Создание системы меню..........................................................................

263

Строка меню JMenuBar ............................................................................

266

Выпадающие меню JMenu и разделители JSeparator ...........................

267

Клавиатурные сокращения и мнемоники................................................

269

Всплывающие меню JPopupMenu...........................................................

273

Загрузка меню из файлов XML................................................................

275

Панели инструментов.............................................................................

284

Простые панели инструментов................................................................

284

Комбинирование панелей инструментов................................................

287

Резюме ....................................................................................................

291

Глава 11. Списки ..............................................................................................

292

Обычные списки JList.............................................................................

292

Модели.......................................................................................................

295

Модели для больших списков..................................................................

300

Выделение.................................................................................................

301

Внешний вид списка.................................................................................

306

События списка.........................................................................................

313

Список из флажков...................................................................................

316

Списки JList в Java 7.................................................................................

322

Раскрывающиеся списки JComboBox ...................................................

322

Модель ComboBoxModel ..........................................................................

324

Внешний вид списка.................................................................................

330

Редактирование ........................................................................................

333

События раскрывающегося списка.........................................................

337

Управление всплывающим меню............................................................

340

Резюме ....................................................................................................

341

Глава 12. Диапазоны значений......................................................................

342

Ползунки JSlider......................................................................................

342

Модель BoundedRangeModel ...................................................................

345

События ползунков...................................................................................

347

Дополнительная настройка внешнего вида............................................

349

Индикаторы процесса JProgressBar .....................................................

352

Когда ничего не ясно.................................................................................

356

Небольшие хитрости ................................................................................

358

Счетчики JSpinner...................................................................................

360

Выбор дат..................................................................................................

363

Редактор элементов .................................................................................

366

Резюме ....................................................................................................

371

Содержание

VII

Глава 13. Управление пространством..........................................................

372

Панель с вкладками JTabbedPane ........................................................

372

Модель выделения и обработка событий...............................................

376

Дополнительные возможности компонента JTabbedPane.....................

379

Размещение компонентов во вкладках...................................................

381

Разделяемая панель JSplitPane ............................................................

384

Свойства разделяемой панели................................................................

387

События разделяемой панели.................................................................

389

Разделяемая панель в насыщенных интерфейсах................................

389

Панель прокрутки JScrollPane ...............................................................

390

Управление прокруткой............................................................................

393

Компонент JViewport.................................................................................

397

Особенности реализации класса JViewport .....................................

400

Заголовки и уголки панели прокрутки JScrollPane .................................

400

Полосы прокрутки JScrollBar....................................................................

404

Резюме ....................................................................................................

406

Глава 14. Стандартные диалоговые окна...................................................

407

Многоликий класс JOptionPane .............................................................

408

Вывод сообщений.....................................................................................

408

Ввод данных..............................................................................................

412

Получение подтверждений ......................................................................

416

Дополнительные возможности ................................................................

420

Выбор файлов в компоненте JFileChooser ..........................................

420

Фильтры файлов.......................................................................................

424

Внешний вид файлов ...............................................................................

427

Дополнительные компоненты..................................................................

429

Выбор цвета в компоненте JColorChooser ...........................................

433

Резюме ....................................................................................................

435

Глава 15. Уход за деревьями.........................................................................

436

Простые деревья....................................................................................

436

Модель дерева TreeModel .....................................................................

439

Узлы TreeNode...........................................................................................

444

Стандартная модель DefaultTreeModel ...................................................

445

Оповещение в нестандартных моделях..................................................

451

Модели деревьев — краткое резюме...............................................

452

Выделение..............................................................................................

452

Внешний вид деревьев..........................................................................

458

Дерево с флажками................................................................................

462

Редактирование узлов ...........................................................................

468

Создание собственного редактора..........................................................

472

Дополнительные события деревьев.....................................................

476

Резюме ....................................................................................................

478

Глава 16. Текстовые компоненты.................................................................

479

Каталог текстовых компонентов............................................................

480

Текстовые поля.........................................................................................

480

Многострочное поле JTextArea ................................................................

483

Редактор JEditorPane................................................................................

487

Редактирование по максимуму — компонент JTextPane.......................

491

Форматированный вывод — компонент JFormattedTextField ................

495

Модель документа Document ................................................................

500

VIII

Содержание

Текстовое поле с автоматическим заполнением....................................

502

Отмена и повтор операций ......................................................................

507

Управление курсором — интерфейс Caret...........................................

510

Дополнительное выделение текста......................................................

513

Резюме ....................................................................................................

515

Глава 17. Таблицы...........................................................................................

516

Простые таблицы ...................................................................................

516

Простая настройка внешнего вида.......................................................

520

Модели таблицы JTable..........................................................................

522

Модель данных TableModel ......................................................................

523

Модель таблицы для работы с базами данных......................................

531

Модель столбцов таблицы.......................................................................

537

Модели выделения...................................................................................

544

Сортировка и фильтрация........................................................................

548

Внешний вид ячеек таблицы.................................................................

554

Редактирование ячеек таблицы............................................................

560

Редактор дат..............................................................................................

562

Заголовок таблицы JTableHeader..........................................................

566

Резюме ....................................................................................................

569

Глава 18. Круговорот данных........................................................................

570

Обмен данными......................................................................................

570

Буфер обмена Clipboard...........................................................................

570

Типы данных для обмена.........................................................................

571

Адаптация данных....................................................................................

574

Буфер обмена и стандартные компоненты Swing..................................

578

Операции перетаскивания.......................................................................

578

TransferHandler и буфер обмена..............................................................

585

Отмена и повтор операций....................................................................

587

Резюме ....................................................................................................

591

Введение

Java, «чистокровный» объектно-ориентированный язык с прекрасным набором библиотек, изначально переносимый между различными платформами и практически не зависящий от конкретного производителя, быстро завоевал сердца разработчиков и признание крупнейших производителей программного обеспечения. Это скорее не язык, а платформа. Со времени первого издания книги платформа Java стала еще более популярна и является, пожалуй, самым распространенным решением при создании различных сложных приложений. Она охватывает практически все области, в которых применяется программирование: платформа J2ME (Java 2 Micro Edition) предназначена для создания приложений для мобильных устройств с ограниченными ресурсами, платформа J2EE (Java 2 Enterprise Edition) позволяет создавать распределенные системы самого высокого качества и любого уровня сложности, а также пользовательские интерфейсы Web, но ядром Java можно без сомнения назвать платформу J2SE (Java 2 Standard Edition) — именно с нее все начиналось, и эта часть Java по-прежнему является центральной. С помощью J2SE вы сможете создавать приложения для самых разнообразных нужд пользователей, это могут быть текстовые редакторы, электронные таблицы, клиенты для распределенных систем, созданных по технологии J2EE, апплеты, работающие в браузере как части HTML-страниц, удобные интерфейсы к базам данных JDBC и т. д.

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

Сегодня особенно популярны пользовательские интерфейсы HTML в сети Web, которые с появлением динамического обновления данных с помощью AJAX во многом вытесняют стандартные приложения операционных систем. Написание таких интерфейсов бывает трудоемким и требует взаимодействия распределенных сетевых систем, в то время как стандартные интерфейсы операционных систем зачастую помогают быстрее создать полнофункциональное приложение, особенно если вам помогает библиотека высокого качества и вам необходим полный доступ к ресурсам системы.

В этой книге мы увидим, на что способны современные версии Java при создании пользовательского интерфейса приложений. В вашем распоряжении окажутся и мельчайшие детали внешнего вида программ, и средства обработки данных, которые должен будет отображать компонент. Java располагает множеством компонентов, способных удовлетворить самый взыскательный вкус и вывести на экран самые замысловатые данные. И как бы сложно ни было то, что вы намереваетесь создать, изучение и освоение инструментов, которые окажутся у вас в руках, не потребует титанических усилий. Поняв основные принципы работы компонентов и разобрав несколько простых примеров, вы осознаете, что получили не обычный набор библиотек для создания пользовательского интерфейса, а настоящую палитру художника, которая позволит нарисовать великолепную картину всего парой несложных мазков.

X

Введение

Java Foundation Classes

Одной из самых больших и самых важных частей платформы J2SE является набор библиотек под общим названием Java Foundation Classes (JFC). Именно эти библиотеки предназначены для создания эффектных и отточенных пользовательских интерфейсов. Ниже перечислены библиотеки, входящие в набор Java Foundation Classes:

Swing. Важнейшая часть JFC; содержит компоненты для создания пользовательского интерфейса, такие как таблицы и текстовые поля, а также инструменты для работы с этими компонентами. Библиотека Swing, как мы вскоре увидим, великолепно спланирована и реализована, она способна дать все, что может пожелать разработчик пользовательского интерфейса. Если вы создаете лаконичный «деловой» интерфейс, вам понадобится всего пара строк кода. Если же вы «раскрашиваете» ваше приложение всеми красками радуги и создаете для него сложный нестандартный интерфейс, вам понадобится немного больше усилий. Но ничего невозможного для Swing нет.

Java2D. Вторая по важности в JFC библиотека, позволяющая применять в своем приложении современную двухмерную графику, в том числе аффинные преобразования, дробные координаты, сглаживание, расширенные операции с растрами и многое другое. Библиотека Java2D встроена в Swing — все компоненты последней используют ее для вывода своих данных на экран, хотя и неявно.

Accessibility. Набор классов и интерфейсов, следующих промышленному стандарту и наделяющих приложения средствами поддержки пользователей с ограниченными возможностями. С помощью Accessibility вы сможете, например, передать текстовое описание интерфейса системе синтеза речи, что позволит работать с вашей программой пользователям с нарушениями зрения. Замечательно то, что во всех компонентах Swing интерфейсы Accessibility уже реализованы и после небольшой настройки самый обычный интерфейс моментально превращается в специализированный, ориентированный на пользователей с ограниченными возможностями. Для приложений высшего уровня качества это свойство Swing просто незаменимо.

Drag’n’Drop. Дополнение, позволяющее вашему приложению взаимодействовать с приложениями операционной системы пользователя или другими Java-приложениями с помощью технологии перетаскивания (drag and drop). Подобная возможность очень удобна для пользователя и позволяет ему сразу же забыть о том, что приложение написано на Java и не имеет практически никаких связей с его операционной системой. Напрямую с этим дополнением работать, как правило, не приходится, так как Swing берет многие детали процесса на себя.

Ядром Java Foundation Classes без всяких сомнений является библиотека Swing, остальные части набора классов так или иначе встроены в нее или предоставляют для компонентов этой библиотеки дополнительные возможности. Создавать пользовательский интерфейс своих приложений вы будете именно с помощью Swing, и именно эту библиотеку мы будем изучать. Для начала мы познакомимся с основными свойствами Swing, ее общей структурой, а затем перейдем к компонентам библиотеки. Они позволят создавать фантастические пользовательские интерфейсы всего одним мановением руки.

Структура книги

Большая часть книги посвящена описанию компонентов Swing и примерам их использования. Ну а начнем мы с исследования основных механизмов библиотеки, тех