Π”ΠΈΠΏΠ»ΠΎΠΌΡ‹, курсовыС, Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚Ρ‹, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅...
Брочная ΠΏΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅

БСриализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Лабораторная Ρ€Π°Π±ΠΎΡ‚Π°ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

И Ρ‚.Π΄. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ Π² ΠΏΠΎΡ€ΡΠ΄ΠΊΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ add (), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… графичСских систСмах принято мСню Π‘ΠΏΡ€Π°Π²ΠΊΠ° (Help) ΠΏΡ€ΠΈΠΆΠΈΠΌΠ°Ρ‚ΡŒ ΠΊ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ строки мСню. Π­Ρ‚ΠΎ достигаСтся ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ setHelpMenu (), Π½ΠΎ Ρ„актичСскоС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ мСню Π‘ΠΏΡ€Π°Π²ΠΊΠ° опрСдСляСтся графичСской ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ. ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сотрудника" — ΠΏΠΎΠ΄ этим Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ скрываСтся… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

БСриализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π€Π°ΠΊΡƒΠ»ΡŒΡ‚Π΅Ρ‚ «Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΈ ΡΠΈΡΡ‚Π΅ΠΌΡ‹ управлСния»

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ указания ΠΊ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅

ΠΏΠΎ ΠΊΡƒΡ€ΡΡƒ «Π Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ систСмы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ»

" БСриализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²"

Москва 2004 Π³.

ЦСль Ρ€Π°Π±ΠΎΡ‚Ρ‹

1. ΠŸΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π΅Ρ‘ ΠΏΡ€Π°ΠΊΡ‚ичСским ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ.

2. Π˜Π·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ клонирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ сСриализации.

3. ΠžΡΠ²ΠΎΠΈΡ‚ΡŒ классы ObjectInputStream ΠΈ ObjectOutputStream ΠΏΠ°ΠΊΠ΅Ρ‚Π° java.io.

4. Научится ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ дСйствия ΠΌΡ‹ΡˆΠΈ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

5. Π˜Π·ΡƒΡ‡ΠΈΡ‚ΡŒ классы Menu, MenuBar, MenuItem, Dialog, FileDialog ΠΏΠ°ΠΊΠ΅Ρ‚Π° java.awt.

6. ΠΠ°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

7. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ знания Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π—Π°Π΄Π°Π½ΠΈΠ΅ для домашнСй ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ

ΠžΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚СорСтичСским ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ, прСдставлСнным Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ… ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ мСтодичСским указаниям ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠžΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚Скстом задания ΠΊ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΡƒΡŽ трСбованиям задания ΠΊ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅, ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Π—Π°Π΄Π°Π½ΠΈΠ΅ ΠΊ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠΊΠΎΠ½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π΅ графичСский интСрфСйс доступа ΠΊ ΠΌΠ°ΡΡΠΈΠ²Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² классов Employee ΠΈ Manager (см. ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅). Π Π°Π±ΠΎΡ‚Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ мСню, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ содСрТащСго ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты.

— ΠœΠ΅Π½ΡŽ «Π€Π°ΠΉΠ»» (Π’Π½ΡƒΡ‚Ρ€ΠΈ — ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню «ΠΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³», «Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅», «Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅», «ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅»).

— ΠœΠ΅Π½ΡŽ «Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ (Π’Π½ΡƒΡ‚Ρ€ΠΈ — ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню «ΠΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊ», «ΠΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€», «ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сотрудника»).

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π½ΠΎΠ²Ρ‹Ρ… сотрудниках Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Ρ… ΠΎΠΊΠΎΠ½.

На Π³Π»Π°Π²Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π° с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ ΡΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊΠ°Ρ… (Π€.И.О., ΠΎΠΊΠ»Π°Π΄, Π΄Π°Ρ‚Π° поступлСния).

НиТС ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ дСйствия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π²Ρ‹Π±ΠΎΡ€ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² мСню.

МСню «Π€ΠΠ™Π›»

«ΠΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³» — вся информация Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ стираСтся. На ΡΠΊΡ€Π°Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

«Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅» — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… сСриализуСтся Π² Ρ„Π°ΠΉΠ». Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… для этого Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ прСдусмотрСн ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄.

«Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅» — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… дСсСриализуСтся ΠΈΠ· Ρ„Π°ΠΉΠ»Π°. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… для этого Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ прСдусмотрСн ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄.

«Π’Ρ‹Ρ…ΠΎΠ΄» — Π²Ρ‹Π·ΠΎΠ² систСмного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° System. exit (0).

МСню «Π”ΠžΠ‘ΠΠ’Π˜Π’Π¬»

«Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠ°» — показываСтся Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ввСсти Π΄Π°Π½Π½Ρ‹Π΅ для Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠ°. Π­Ρ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ заносятся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, послС Ρ‡Π΅Π³ΠΎ обновляСтся информация Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

«Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°» — Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ, Π½ΠΎ Ρ ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ особСнностСй класса Manager. Класс Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° добавлСния ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ наслСдован ΠΎΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ класса ΠΎΠΊΠ½Π° Employee.

«ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сотрудника» — ΠΏΠΎΠ΄ этим Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ скрываСтся стандартноС ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ записи Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ осущСствляСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ клонирования сСриализациСй (см. ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅). Копия добавляСтся Π² ΠΊΠΎΠ½Π΅Ρ† Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’Ρ‹Π±ΠΎΡ€ записи для копирования осущСствляСтся Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ поля Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Рисунок 1: Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ исполнСния задания

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°

ΠžΡ‚Ρ‡Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ:

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΡƒ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ€Π΅ΡˆΠ°Π΅ΠΌΠΎΠΉ ΠΎΡ‚Π»Π°ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.

Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΡ‚Π»Π°ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, содСрТащСС описаниС интСрфСйсов всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ коммСнтариями.

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы

1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сСриализация / дСсСриализация?

2. КакоС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ называСтся ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹ΠΌ?

3. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ Π²ΡΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

4. Как ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса, встроСнного Π² Java?

5. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сСриализации сохраняСтся ΠΏΡ€ΠΈ наслСдовании?

6. Бколько ΠΏΠΎΠ»Π΅ΠΉ содСрТит интСрфСйс Serializable?

7. Π§Ρ‚ΠΎ подразумСваСтся ΠΏΠΎΠ΄ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ «ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²».

8. НазовитС «Ρ€ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ связи» ΠΌΠ΅ΠΆΠ΄Ρƒ классами Menu, MenuItem, MenuBar, MenuShortCut ΠΈ MenuComponent.

9. НазовитС Π΄Π²Π° способа, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π΅Ρ€Ρ‚Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡƒΠ½ΠΊΡ‚Π°ΠΌΠΈ мСню.

10. Как Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π½Π° ΡΠΊΡ€Π°Π½Π΅ Π² Ρ‚Скстовой области символы `*' вмСсто символов, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹?

11. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «ΠΌΠΎΠ΄Π΅Π»ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹»?

12. Π“Π΄Π΅ хранятся Π΄Π°Π½Π½Ρ‹Π΅ для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹?

13. КакиС Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ячСйки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ JTable?

14. Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… элСмСнтов Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ источники:

1. КСн ΠΡ€Π½ΠΎΠ»ΡŒΠ΄, ДТСймс Гослинг, Дэвид Π₯олмс. Π―Π·Ρ‹ΠΊ программирования Java™.

2. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сайт Java — http://java.sun.com/ (Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π» Π½Π° Ρ€ΡƒΡΡΠΊΠΎΠΌ языкС с ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΎΠΌ).

3. Java™ 2 SDK, Standard Edition Documentation — http://java.sun.com/products/jdk/1.5/index.html.

4. ДТСймс Гослинг, Π‘ΠΈΠ»Π» Π”ΠΆΠΎΠΉ, Π“Π°ΠΉ Π‘Ρ‚ΠΈΠ». БпСцификация языка Java (The Java Language Specification — http://www.javasoft.com/docs/books/jls/). ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½Π° Ρ€ΡƒΡΡΠΊΠΈΠΉ язык — http://www.uni-vologda.ac.ru/java/jls/index.html

5. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сайт ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Eclipse — http://www.eclipse.org/.

Π”Ρ€ΡƒΠ³ΠΎΠ΅:

1. Π”ΠΌΠΈΡ‚Ρ€ΠΈΠΉ Π Π°ΠΌΠΎΠ΄ΠΈΠ½. НачинаСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Java.

2. Николай Π‘ΠΌΠΈΡ€Π½ΠΎΠ². Java 2: Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС.

3. ΠšΠ°Ρ€Ρ‚ΡƒΠ·ΠΎΠ² А. Π’. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Java.

4. Вязовик Н. А. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Java.

5. АлСксСй Π›ΠΈΡ‚Π²ΠΈΠ½ΡŽΠΊ.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π² ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ срСду Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Eclipse — http://lib.juga.ru/article/articleview/174/1/69/.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ мСню

Π’ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Ρ‚ΠΈΠΏΠ° Frame Π·Π°Π»ΠΎΠΆΠ΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ установки стандартной строки мСню (menu bar), располагаСмой Π½ΠΈΠΆΠ΅ строки Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1. Π­Ρ‚Π° строка — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса MenuBar.

ВсС, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для установки строки мСню Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Frame — это ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса MenuBar ΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ setMenuBar ():

Frame f = new Frame («ΠŸΡ€ΠΈΠΌΠ΅Ρ€ мСню»);

MenuBar mb = new MenuBar ();

f.setMenuBar (mb);

Если имя mb Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ся, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΄Π²Π° послСдних обращСния ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ:

f.setMenuBar (new MenuBar ());

РазумССтся, строка мСню Π΅Ρ‰Π΅ пуста ΠΈ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню Π½Π΅ ΡΠΎΠ·Π΄Π°Π½Ρ‹.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт строки мСню — Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π΅ мСню (drop-down menu) — это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Menu. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ Π·Π°Π½Π΅ΡΡ‚ΠΈ ΠΈΡ… Π² ΡΡ‚Ρ€ΠΎΠΊΡƒ мСню Π½ΠΈΡ‡ΡƒΡ‚ΡŒ Π½Π΅ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, Ρ‡Π΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ строку мСню:

Menu mFile = new Menu («Π€Π°ΠΉΠ»»);

mb.add (mFile);

Menu mEdit = new Menu («ΠŸΡ€Π°Π²ΠΊΠ°»);

mb.add (mEdit);

Menu mView = new Menu («Π’ΠΈΠ΄»);

mb.add (mView);

Menu mHelp = new Menu («Π‘ΠΏΡ€Π°Π²ΠΊΠ°»);

mb.setHelpMenu (mHelp);

ΠΈ Ρ‚.Π΄. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ Π² ΠΏΠΎΡ€ΡΠ΄ΠΊΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ add (), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… графичСских систСмах принято мСню Π‘ΠΏΡ€Π°Π²ΠΊΠ° (Help) ΠΏΡ€ΠΈΠΆΠΈΠΌΠ°Ρ‚ΡŒ ΠΊ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ строки мСню. Π­Ρ‚ΠΎ достигаСтся ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ setHelpMenu (), Π½ΠΎ Ρ„актичСскоС ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ мСню Π‘ΠΏΡ€Π°Π²ΠΊΠ° опрСдСляСтся графичСской ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ.

Рисунок 2. БистСма мСню Π—Π°Ρ‚Π΅ΠΌ опрСдСляСм ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π΅ мСню, создавая Π΅Π³ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡƒΠ½ΠΊΡ‚ мСню — это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса MenuItem. Π‘Ρ…Π΅ΠΌΠ° Π΅Π³ΠΎ создания ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊ ΠΌΠ΅Π½ΡŽ Ρ‚ΠΎΡ‡Π½ΠΎ такая ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ мСню:

MenuItem create = new MenuItem («Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ»);

mFile.add (create);

MenuItem open = new MenuItem («ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ…»);

mFile.add (open);

ΠΈ Ρ‚.Π΄. ΠŸΡƒΠ½ΠΊΡ‚Ρ‹ мСню Π±ΡƒΠ΄ΡƒΡ‚ располоТСны свСрху Π²Π½ΠΈΠ· Π² ΠΏΠΎΡ€ΡΠ΄ΠΊΠ΅ обращСния ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ add ().

Часто ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ мСню ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² Π³Ρ€ΡƒΠΏΠΏΡ‹. Одна Π³Ρ€ΡƒΠΏΠΏΠ° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ отдСляСтся Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π΅Ρ€Ρ‚ΠΎΠΉ. На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1 Ρ‡Π΅Ρ€Ρ‚Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈ ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. Π­Ρ‚Π° Ρ‡Π΅Ρ€Ρ‚Π° создаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ addSeparator () класса Menu ΠΈΠ»ΠΈ опрСдСляСтся ΠΊΠ°ΠΊ ΠΏΡƒΠ½ΠΊΡ‚ мСню с Π½Π°Π΄ΠΏΠΈΡΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° — дСфисом:

mFile.add (new MenuItem («-«));

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Ρ‡Ρ‚ΠΎ класс Menu Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ класс MenuItem, Π° Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ мСню само являСтся ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠΌ мСню, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ мСню Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΡƒΠ½ΠΊΡ‚Π° Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ мСню, Ρ‚Π΅ΠΌ самым организуя Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ подмСню:

Menu send = new Menu («ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ»);

mFile.add (send);

Π—Π΄Π΅ΡΡŒ мСню send добавляСтся Π² ΠΌΠ΅Π½ΡŽ mFile ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΅Π³ΠΎ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ². ПодмСню send заполняСтся ΠΏΡƒΠ½ΠΊΡ‚Π°ΠΌΠΈ мСню ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ мСню.

Часто ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ мСню ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ для Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠ· Π½ΠΈΡ… ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ возмоТностСй, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ checkbox. Π’Π°ΠΊΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΌ Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠΌ. Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса CheckboxMenuItem:

CheckboxMenuItem disk = new CheckboxMenuItem («Π”иск A:», true);

send.add (disk);

send.add (new CheckboxMenuItem («ΠΡ€Ρ…ΠΈΠ²»));

ΠΈ Ρ‚.Π΄.

ВсС, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ пСрСчислСнных дСйствий, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1.

МногиС графичСскиС ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, Π½ΠΎ Π½Π΅ MS Windows, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ отсоСдиняСмыС (tear-off) мСню, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΏΠΎ ΡΠΊΡ€Π°Π½Ρƒ. Π­Ρ‚ΠΎ указываСтся Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅

Menu (String label, boolean tearOff)

Если tearoff == true ΠΈ Π³Ρ€Π°Ρ„ичСская ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΡƒΠΌΠ΅Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ отсоСдиняСмоС мСню, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ создано. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС этот Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ просто игнорируСтся.

НаконСц, Π½Π°Π΄ΠΎ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ дСйствия ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ мСню. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ мСню Ρ‚ΠΈΠΏΠ° MenuItem ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‚ события Ρ‚ΠΈΠΏΠ° ActionEvent, поэтому Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΊ Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса-ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ ΠΊΠ°ΠΊ ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ, записав Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅

create.addActionListener (new SomeActionEventHandler ())

open.addActionListener (new AnotherActionEventHandler ())

ΠŸΡƒΠ½ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° CheckboxMenuItem ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‚ события Ρ‚ΠΈΠΏΠ° ItemEvent, поэтому Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ-ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŽ этого события:

disk.addItemListener (new SomeItemEventHandler ())

ΠžΡ‡Π΅Π½ΡŒ часто дСйствия, записанныС Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… мСню, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ, Π½ΠΎ ΠΈ «Π³ΠΎΡ€ΡΡ‡ΠΈΠΌΠΈ» клавишами-аксСлСраторами (shortcut), Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ‡Π°Ρ‰Π΅ всСго ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавишС. На ΡΠΊΡ€Π°Π½Π΅ Π² ΠΏΡƒΠ½ΠΊΡ‚Π°Ρ… мСню, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ «Π³ΠΎΡ€ΡΡ‡ΠΈΠ΅» клавиши, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ подсказки Π²ΠΈΠ΄Π° Ctrl+N, Ctrl+O, ΠΊΠ°ΠΊ Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 1. «Π“орячая» клавиша опрСдСляСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса MenuShortcut ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ся Π² Π΅Π³ΠΎ конструкторС константой класса KeyEvent, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

MenuShortcut keyCreate = new MenuShortcut (KeyEvent.VK_N);

ПослС этого «Π³ΠΎΡ€ΡΡ‡Π΅ΠΉ» Π±ΡƒΠ΄Π΅Ρ‚ комбинация клавиш +. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ указываСтся Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ класса MenuItem:

MenuItem create = new MenuItem («Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ», keyCreate);

НаТатиС + Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ создания. Π­Ρ‚ΠΈ дСйствия, разумССтся, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

MenuItem open = new Menultern («ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ…»,

new — MenuShortcut (KeyEvent.VK_O));

МоТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ клавиши. ДСйствиС ΠΏΡƒΠ½ΠΊΡ‚Π° мСню Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ клавиш ++, Ссли Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ конструктором:

MenuShortcut (int key, boolean useShift)

Π‘ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ useShift == true.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания мСню

import java.awt.*;

import java.awt.event.*;

public class MenuScribble extends Frame {

public MenuScribble (String s) {

super (s);

MenuBar mb = new MenuBar ();

setMenuBar (mb);

Menu f = new Menu («Π€Π°ΠΉΠ»»);

Menu h = new Menu («Π‘ΠΏΡ€Π°Π²ΠΊΠ°»);

mb.add (f);

mb.add (h);

MenuItem open = new MenuItem («ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ…»,

new MenuShortcut (KeyEvent.VK0));

MenuItem save = new MenuItem («Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ»,

new MenuShortcut (KeyEvent.VK_S));

MenuItem saveAs = new Menultera («Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ…»);

MenuItem exit = new MenuItem («Π’Ρ‹Ρ…ΠΎΠ΄»,

new MenuShortcut (KeyEvent.VK_Q));

f.add (open);

f.add (save);

f.add (saveAs);

f.addSeparator ();

f.add (exit);

open.addActionListener (new ActionListener () {

public void actionPerformed (ActionEvent e) {

FileDialog fd = new FileDialog (new Frame (),

«Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ», FileDialog. LOAD);

fd.setVisible (true);

}

});

saveAs.addActionListener (new ActionListener () {

public void actionPerformed (ActionEvent e) {

FileDialog fd = new FileDialog (new Frame (),

«Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ», FileDialog. SAVE);

fd.setVisible (true);

}

});

exit.addActionListener (new ActionListener () {

public void actionPerformed (ActionEvent e) {System.exit (0);}

});

MenuItem about = new MenuItem («Πž ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅»);

h.add (about);

about.addActionListener (

// …ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ

);

addWindowListener (new WinClose ());

setVisible (true);

} // ΠΊΠΎΠ½Π΅Ρ† конструктора

// Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ класс — ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события закрытия ΠΎΠΊΠ½Π°

class WinClose extends WindowAdapter {

public void windowClosing (WindowEvent e) {System.exit (0);}

}

public static void main (String[] args) {

new MenuScribble («ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° с ΠΌΠ΅Π½ΡŽ»);

}

}

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Dialog

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Dialog — это ΠΎΠΊΠ½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ для ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ прилоТСния. Оно автоматичСски рСгистрируСтся Π² ΠΎΠΊΠΎΠ½Π½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅ графичСской ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΏΠΎ ΡΠΊΡ€Π°Π½Ρƒ, ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹. Но ΠΎΠΊΠ½ΠΎ Ρ‚ΠΈΠΏΠ° Dialog, ΠΊΠ°ΠΊ ΠΈ Π΅Π³ΠΎ супСркласс — ΠΎΠΊΠ½ΠΎ Ρ‚ΠΈΠΏΠ° Window, — ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° owner, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ указываСтся Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅. Окно Ρ‚ΠΈΠΏΠ° Dialog ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹ΠΌ (modal), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π°Π΄ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ всС прСдписанныС дСйствия, ΠΈΠ½Π°Ρ‡Π΅ ΠΈΠ· ΠΎΠΊΠ½Π° нСльзя Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΉΡ‚ΠΈ.

Π’ ΠΊΠ»Π°ΡΡΠ΅ сСмь конструкторов. Из Π½ΠΈΡ…:

Β· Dialog (Dialog owner) — создаСт нСмодальноС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ с ΠΏΡƒΡΡ‚ΠΎΠΉ строкой Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°;

Β· Dialog (Dialog owner, String title) — создаСт нСмодальноС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ со ΡΡ‚Ρ€ΠΎΠΊΠΎΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° title;

Β· Dialog (Dialog owner, String title, boolean modal) — создаСт Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹ΠΌ, Ссли modal == true.

Π§Π΅Ρ‚Ρ‹Ρ€Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… конструктора Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹, Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π°, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ ΠΎΠΊΠ½Ρƒ Ρ‚ΠΈΠΏΠ° Frame:

Dialog (Frame owner)

Dialog (Frame owner, String title)

Dialog (Frame owner, boolean modal)

Dialog (Frame owner, String title, boolean modal)

Π‘Ρ€Π΅Π΄ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса интСрСсны ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹: isModal (), ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΉ состояниС ΠΌΠΎΠ΄Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈ setModal (boolean modal), ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉ это состояниС.

Бобытия

ΠšΡ€ΠΎΠΌΠ΅ Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠΉ класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠΊΠ½Π°, Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ с ΡΠΊΡ€Π°Π½Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π° Π½Π° ΡΠΊΡ€Π°Π½Π΅ происходит событиС WindowEvent.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 1 создаСтся модальноС ΠΎΠΊΠ½ΠΎ доступа, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ вводится имя ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ. Пока Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ сдСлан ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Π²ΠΎΠ΄, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ дСйствия Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹. На Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2 ΠΏΠΎΠΊΠ°Π·Π°Π½ Π²ΠΈΠ΄ этого ΠΎΠΊΠ½Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. МодальноС ΠΎΠΊΠ½ΠΎ доступа

import java.awt.*;

import java.awt.event.*;

class LoginWin extends Dialog {

LoginWin (Frame f, String s) {

super (f, s, true);

setLayout (null);

setFont (new Font («Serif», Font. PLAIN, 14));

Label l1 = new Label («Π’Π°ΡˆΠ΅ имя:», Label. RIGHT);

l1.setBounds (20, 30, 70, 25); add (l1);

Label l2 = new Label («ΠŸΠ°Ρ€ΠΎΠ»ΡŒ:», Label. RIGHT);

l2.setBounds (20, 60, 70, 25); add (l2);

TextField tf1 = new TextField (30);

tf1.setBounds (100, 30, 160, 25); add (tf1);

TextField tf2 = new TextField (30);

tf2.setBounds (100, 60, 160, 25); add (tf2);

tf2.setEchoChar ('*');

Button b1 = new Button («ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ»);

b1.setBounds (50, 100, 100, 30); add (b1);

Button b2 = new Button («ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ»);

b2.setBounds (160, 100, 100, 30); add (b2);

setBounds (50, 50, 300, 150);

}

}

class DialogTest extends Frame {

DialogTest (String s) {

super (s);

setLayout (null);

setSize (200, 100);

setVisible (true);

Dialog d = new LoginWin (this, «ΠžΠΊΠ½ΠΎ Π²Ρ…ΠΎΠ΄Π°»);

d.setvisible (true);

}

public static void main (String[] args) {

Frame f = new DialogTest («ΠžΠΊΠ½ΠΎ-Π²Π»Π°Π΄Π΅Π»Π΅Ρ†»);

f.addWindowListener (new WindowAdapter () {

public void windowClosing (WindowEvent ev) {

System.exit (0);

}

});

}

}

Рисунок 2. МодальноС ΠΎΠΊΠ½ΠΎ доступа

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 3. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ FileDialog.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ FileDialog — это модальноС ΠΎΠΊΠ½ΠΎ с Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅ΠΌ Ρ‚ΠΈΠΏΠ° Frame, содСрТащСС стандартноС ΠΎΠΊΠ½ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы для открытия (константа LOAD) ΠΈΠ»ΠΈ сохранСния (константа SAVE). Окна ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса FileDialog автоматичСски.

Π’ ΠΊΠ»Π°ΡΡΠ΅ Ρ‚Ρ€ΠΈ конструктора:

Β· FileDialog (Frame owner) — создаСт ΠΎΠΊΠ½ΠΎ с ΠΏΡƒΡΡ‚Ρ‹ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ для открытия Ρ„Π°ΠΉΠ»Π°;

Β· FileDialog (Frame owner, String title) — создаСт ΠΎΠΊΠ½ΠΎ открытия Ρ„Π°ΠΉΠ»Π° с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ title;

Β· FileDialog (Frame owner, String title, int mode) — создаСт ΠΎΠΊΠ½ΠΎ открытия ΠΈΠ»ΠΈ сохранСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°; Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ mode ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° значСния: FileDialog. LOAD ΠΈ FileDialog.SAVE.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса getDirectory () ΠΈ getFile () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈ ΠΈΠΌΡ Ρ„Π°ΠΉΠ»Π° Π² Π²ΠΈΠ΄Π΅ строки String. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈΠ»ΠΈ сохранСниС Ρ„Π°ΠΉΠ»Π° Π·Π°Ρ‚Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ классов Π²Π²ΠΎΠ΄Π° / Π²Ρ‹Π²ΠΎΠ΄Π°.

МоТно ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для поиска Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΈΠΌΡ Ρ„Π°ΠΉΠ»Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ setDirectory (String dir) ΠΈ setFile (String fileName).

ВмСсто ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° fileName ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ шаблон, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, *.java (ΠΏΠ΅Ρ€Π²Ρ‹Π΅ символы — Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠ° ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°), Ρ‚ΠΎΠ³Π΄Π° Π² ΠΎΠΊΠ½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΈΠ΄Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ², Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΈ ΡΠ»ΠΎΠ²ΠΎΠΌ java.

ΠœΠ΅Ρ‚ΠΎΠ΄ setFilenameFilter (FilenameFilter filter) устанавливаСт шаблон filter для ΠΈΠΌΠ΅Π½ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π’ ΠΎΠΊΠ½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΈΠ΄Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ², подходящиС ΠΏΠΎΠ΄ шаблон. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² SUN JDK Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ MS Windows.

Бобытия

ΠšΡ€ΠΎΠΌΠ΅ событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΠΊΠ½Π°, Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ с ΡΠΊΡ€Π°Π½Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π° Π½Π° ΡΠΊΡ€Π°Π½Π΅ происходит событиС WindowEvent.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 4. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†

Для создания Ρ‚Π°Π±Π»ΠΈΡ† ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ JTable, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ довольно слоТной структурой, которая, Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, скрыта ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ лишь Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строк ΠΊΠΎΠ΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ JTable Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠΌ Π² ΡΠ΅Π±Π΅, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚.Π½. модСль Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Для создания ΠΌΠΎΠ΄Π΅Π»ΠΈ прСдусмотрСн ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс AbstractTableModel, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

public int getRowCount (); - Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство строк Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

public int getColumnCount (); - Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство столбцов.

public object getValueAt (int row, int column); - Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ содСрТимоС ячСйки Π² Ρ€ΡΠ΄Ρƒ row ΠΈ ΡΡ‚ΠΎΠ»Π±Ρ†Π΅ column.

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π² ΡΡ‡Π΅ΠΉΠΊΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π² Ρ‡Π°ΡΡ‚ности, строка ΠΈΠ»ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°. Для помСщСния числа Π² ΡΡ‡Π΅ΠΉΠΊΡƒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ числовой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:

return new Integer (100);

Для задания Π½Π°Π·Π²Π°Π½ΠΈΠΉ столбцам Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄:

public int getColumnName (int c);

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ с ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½ΠΎΠΌΠ΅Ρ€ столбца. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ конструкция switch-case (ΠΈΠ»ΠΈ if-else), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ.

public String getColumnName (int c) {

if (c == 0)

return «Π€.И.О.»;

else if (c == 1)

return «Π”ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ»;

else if (c==2)

return «Π—Π°Ρ€ΠΏΠ»Π°Ρ‚Π°»;

else if (c == 3)

return «Π“ΠΎΠ΄»;

else if (c == 4)

return «ΠœΠ΅ΡΡΡ†»;

else if (c == 5)

return «Π”Π΅Π½ΡŒ»;

else

return null;

}

Π’Π°ΠΊΠΆΠ΅ Π² Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ нСпосрСдствСнно Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΈ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для ΠΈΡ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. ПослС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ JTable ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ структура Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ / количСство строк измСнились, для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса AbstractTableModel, ΠΊΠ°ΠΊ fireRowsInserted ΠΈ ΠΏΡ€.

Π”Π°Π»Π΅Π΅ создаётся экзСмпляр класса JTable, Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

JTable empTable = new JTable (myTableModel);

МодСль Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π° ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° setModel.

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, для создания полос ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ стандартным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ — помСстим Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π½Π° ΠΏΠ°Π½Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠ° JScrollPane:

JScrollPane pane= new JScrollPane (empTable);

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ панСль Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ:

this.getContentPane ().add (pane);

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ трСбуСтся информация ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ строкС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Для получСния Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ:

1. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ ΠΎΠ΄Π½ΠΎΠΉ строки. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ Π²Ρ‹Π±ΠΎΡ€Π° строк Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

table.getSelectionModel ().setSelectionMode (mode)

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ mode ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Ρ€ΠΈ значСния:

0 — выбираСтся ΠΎΠ΄Π½Π° строка.

1 — нСсколько смСТных строк.

2 — нСсколько ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… строк.

2. Для получСния Π½ΠΎΠΌΠ΅Ρ€Π° Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ строки Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ getSelectedRow ().

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Для Ρ€Π΅ΠΆΠΈΠΌΠ° Π²Ρ‹Π±ΠΎΡ€Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строк сущСствуСт ΠΌΠ΅Ρ‚ΠΎΠ΄ getSelectedRows (), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ массив int[] Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… строк.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 5. БСриализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ классов ObjectInputStream ΠΈ ObjectOutputStream ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Π΅ слоТных Ρ‚ΠΈΠΏΠΎΠ² — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, массивы, строки — ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ классов DataInputStream ΠΈ DataOutputStream Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ простых Ρ‚ΠΈΠΏΠΎΠ².

Бходство усиливаСтся Ρ‚Π΅ΠΌ, Π§Ρ‚ΠΎ классы Objectxxx содСрТат ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠ°ΠΊ для Ρ‡Ρ‚Π΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΈ Π·Π°ΠΏΠΈΡΠΈ простых Ρ‚ΠΈΠΏΠΎΠ². Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Π½Π΅ Π΄Π»Ρ использования Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, Π° Π΄Π»Ρ записи / чтСния ΠΏΠΎΠ»Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² массивов.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ записи ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π½Π°Π·Π²Π°Π½ΠΈΠ΅ сСриализации (serialization), Π° Ρ‡Ρ‚Сния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ Π²ΠΎΡΡΡ‚ановлСния Π΅Π³ΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти — дСсСриализации (deserialization).

БСриализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ Π΅Π³ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π»ΠΎΠ²Ρ€Π΅Π΄Π½Ρ‹ΠΉ процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΌΠ°ΡΡΠΈΠ², ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ элСмСнты массива, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ private_поля ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, обСспСчив сСбС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, доступ ΠΊ ΡΠ΅ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΌΠΈ полями ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ с Π½ΠΈΠΌ нСдопустимыС дСйствия.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сСриализации ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π½ΡƒΡ‚ΡŒ Π½Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Serializable. Π­Ρ‚ΠΎΡ‚ интСрфСйс Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π½ΠΈ ΠΏΠΎΠ»Π΅ΠΉ, Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΌ Π½Π΅Ρ‡Π΅Π³ΠΎ. По ΡΡƒΡ‚ΠΈ Π΄Π΅Π»Π° запись

class A implements Serializable{…}

это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠ°, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π°Ρ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ класса А.

Π’ Java процСсс сСриализации максимально Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½. Достаточно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса ObjectOutputStream, связав Π΅Π³ΠΎ с Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΡΡ‚ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ writeObject ():

MyClass me = new MyClass («abc», -12, 5.67e5);

int[] arr = {10, 20, 30};

ObjectOutputStream oos = new ObjectOutputStream (

new FileOutputStream («myobjects.ser»));

oos.writeObject (me);

oos.writeObject (arr);

oos.writeObject («Some string»);

oos.writeObject (new Date ());

oos.flush ();

Π’ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ выводятся всС нСстатичСскиС поля ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, нСзависимо ΠΎΡ‚ ΠΏΡ€Π°Π² доступа ΠΊ Π½ΠΈΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ свСдСния ΠΎ ΠΊΠ»Π°ΡΡΠ΅ этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ восстановлСния ΠΏΡ€ΠΈ дСсСриализации. Π‘Π°ΠΉΡ‚-ΠΊΠΎΠ΄Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса Π½Π΅ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΡŽΡ‚ся.

Если Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ссылки Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ‚ΠΎΠΆΠ΅ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ, Π° Π² Π½ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ссылки Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ся Ρ†Π΅Π»ΠΎΠ΅ мноТСство ΠΏΡ€ΠΈΡ‡ΡƒΠ΄Π»ΠΈΠ²ΠΎ связанных ΠΌΠ΅ΠΆΠ΄Ρƒ собой сСриализуСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠœΠ΅Ρ‚ΠΎΠ΄ writeObject () распознаСт Π΄Π²Π΅ ссылки Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΎΠ½ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π΅Ρ‚ ссылки, Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹Π΅ Π² ΠΊΠΎΠ»ΡŒΡ†ΠΎ, ΠΈ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚ зацикливания.

ВсС классы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², входящих Π² Ρ‚Π°ΠΊΠΎΠ΅ сСриализуСмоС мноТСство, Π° Ρ‚Π°ΠΊΠΆΠ΅ всС ΠΈΡ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ классы, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс Serializable, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ класса NotSerializableException ΠΈ ΠΏΡ€ΠΎΡ†Π΅ΡΡ сСриализации прСрвСтся. МногиС классы J2SDK Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ этот интСрфСйс. Π£Ρ‡Ρ‚ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ всС ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… классов Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ?). НапримСр, класс java.awt. Component Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Serializable, Π·Π½Π°Ρ‡ΠΈΡ‚, всС графичСскиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ. НС Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ этот интСрфСйс ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ классы, тСсно связанныС с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, java.awt. Toolkit. БостояниС экзСмпляров Ρ‚Π°ΠΊΠΈΡ… классов Π½Π΅Ρ‚ смысла ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎ ΡΠ΅Ρ‚ΠΈ. НС Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйс Serializable ΠΈ ΠΊΠ»Π°ΡΡΡ‹, содСрТащиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ свСдСния Java «Π΄Π»Ρ слуТСбного пользования».

ДСсСриализация происходит Ρ‚Π°ΠΊ ΠΆΠ΅ просто, ΠΊΠ°ΠΊ ΠΈ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ:

ObjectlnputStream ois = new ObjectInputStream (

new FilelnputStream («myobjects.ser»));

MyClass mcl = (MyClass) ois. readObject ();

int[] a = (int[]) ois. readObject ();

String s = (String) ois. readObject ();

Date d = (Date) ois. readObject ();

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 6. ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ сСриализации

Под ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ, нСзависимой ΠΎΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-ΠΊΠ»ΠΎΠ½Π° Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ‚ Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π», Π²Π΅Ρ€Π½ΠΎ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅: ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ‚ Π½Π° ΠΊΠ»ΠΎΠ½.

БСриализация — ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для клонирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π‘ΡƒΡ‚ΡŒ Π΅Π³ΠΎ состоит Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ исходный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π°, Π° Π·Π°Ρ‚Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎ ΡΠ²ΠΎΠΉΡΡ‚Π²Π°ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Ρƒ.

НСобходимо ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ способ Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π² ΡΠΈΠ»Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½:

— ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ сСриализуСмым, Ρ‡Ρ‚ΠΎ справСдливо Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π΄Π»Ρ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

— ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сСриализациСй Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ нСсколько ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΎΠ±Ρ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° клонирования.

Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Π² ΡΠ»ΡƒΡ‡Π°ΡΡ… ΠΊΠΎΠ³Π΄Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ написания ΠΊΠΎΠ΄Π° становится Π²Π°ΠΆΠ½Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ скорости выполнСния, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ оказываСтся ΠΊΠ°ΠΊ нСльзя кстати.

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ схСму.

— Π‘оздаётся класс SerialCloneable, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйсы Cloneable ΠΈ Serializable.

— ΠšΠ»Π°ΡΡ SerialCloneable ΠΈΠΌΠ΅Π΅Ρ‚ СдинствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ clone (), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ происходит сСриализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠœΠ΅Ρ‚ΠΎΠ΄ clone () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

— ΠšΠ»Π°ΡΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ клонирования, наслСдуСтся ΠΎΡ‚ ΠΊΠ»Π°ΡΡΠ° SerialCloneable.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 7. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° классов Employee ΠΈ Manager

public class Manager extends Employee {

private Employee secretary;

public Manager (String n, double s, int year, int month, int day) {

super (n, s, year, month, day);

secretary = null;

}

public void setSecretary (Employee s) {

secretary = s;

}

}

public class Employee implements Serializable {

private String name;

private double salary;

private Date hireDay;

public Employee (){};

public Employee (String n, double s, int year, int month, int day) {

name = n;

salary = s;

GregorianCalendar calendar = new GregorianCalendar (year, month1, day);

hireDay = calendar. getTime ();

}

public String getName () {

return name;

}

public double getSalary () {

return salary;

}

public Date getHireDay () {

return hireDay;

}

public void raiseSalary (double byPercent) {

double raise=salary*byPercent/100;

salary+=raise;

}

}

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ