Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Β«ΠΠΎΠΌΠΈΠ½ΠΎΒ»
ΠΡΠ° ΡΡ Π΅ΠΌΠ° ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ, Π½ΠΎ Π΅ΠΉ ΡΠ°ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΆΠΈΠ·Π½ΠΈ. ΠΠΎΠΏΡΡΡΠΈΠΌ, ΠΊΡΠΎ-ΡΠΎ ΡΠ΅ΡΠΈΠ» ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°ΡΡ ΠΊΠ²Π°ΡΡΠΈΡΡ. ΠΠ½ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π² Π½Π΅Π΅, ΠΊΠ°ΠΊ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΡΠ°Π·Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ: ΠΌΠ΅Π±Π΅Π»Ρ, ΡΠ°Π½ΡΠ΅Ρ Π½ΠΈΠΊΡ, ΡΠ»Π΅ΠΊΡΡΠΎΠ½ΠΈΠΊΡ, Π°Π½ΡΠΈΠΊΠ²Π°ΡΠΈΠ°Ρ. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ — ΠΊΠ²Π°ΡΡΠΈΡΡ ΠΏΠΎΡΠ΅ΡΡΡ Π²ΠΎΡΡ, — ΠΈ Ρ ΠΎΠ·ΡΠΈΠ½ Ρ ΠΎΡΠ΅Ρ Π΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΊΠ»Π°ΡΡΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ — ΠΎΡ ΡΠ°Π½Π½ΡΠ΅ Π°Π³Π΅Π½ΡΡΡΠ²Π°… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Β«ΠΠΎΠΌΠΈΠ½ΠΎΒ» (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠΎΡΡΠ΄Π°ΡΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΡΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²ΡΡΡΠ΅Π³ΠΎ ΠΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ
«Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³ΡΠΊΠΈΠΉ Π³ΠΎΡΡΠ΄Π°ΡΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΠΎΠ»ΠΈΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅Ρ»
ΠΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΠΎ-ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΡΠΈΡΡΡ ΠΠ°ΡΠ΅Π΄ΡΠ° «ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π² ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΊΠ΅ ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½ΡΠ΅»
ΠΠ£Π Π‘ΠΠΠΠ ΠΠ ΠΠΠΠ’ ΠΠΎ Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Π΅ «ΠΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅»
ΠΠ° ΡΠ΅ΠΌΡ: Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ «ΠΠΎΠΌΠΈΠ½ΠΎ»
ΠΡΠΏΠΎΠ»Π½ΠΈΠ»: ΡΡΡΠ΄Π΅Π½Ρ Π³Ρ. 1074/2
ΠΡΠΎΠΌΠΎΠ²Π° Π.Π.
ΠΡΠΈΠ½ΡΠ»:Π΄ΠΎΡΠ΅Π½Ρ Π§Π°Π½ΡΠ΅Π² Π.Π.
Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
1. ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π² Java
1.1 ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
1.2 Π Π°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
1.3 ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅
2. Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ «ΠΠΎΠΌΠΈΠ½ΠΎ»
2.1 ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
2.2 ΠΠ±ΡΠ΅ΠΊΡΠ½Π°Ρ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π‘ΠΏΠΈΡΠΎΠΊ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. Π’Π΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. Π’Π΅ΡΡΠΎΠ²ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π¦Π΅Π»ΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΡΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ «ΠΠΎΠΌΠΈΠ½ΠΎ», ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΡΡ Π½Π°ΡΡΠΎΠ»ΡΠ½ΡΡ ΠΈΠ³ΡΡ.
ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ ΡΠ΅Π»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅ΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ:
ΠΠ·ΡΡΠΈΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Π½Π° ΡΠ·ΡΠΊΠ΅ Java;
ΠΡΡΡΠ½ΠΈΡΡ, ΠΊΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Java;
ΠΠ°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π Ρ ΠΎΠ΄Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ, ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΡΠ·ΡΠΊΠ° Java. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ° ΠΈ ΠΏΠΎΠ½ΡΡΠ½Π°.
Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΌΠΈ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ ΡΠ°Π±ΠΎΡΠ° ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ:
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Π½Π° ΡΠ·ΡΠΊΠ΅ Java (ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ);
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ»Π°Π²Π° 1. ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π² Java
1.1 ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π Java Π΅ΡΡΡ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² (Graphics User Interface). ΠΡΠΎ Abstract Windows Toolkit (AWT) ΠΈ Swing. ΠΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΡ Π½ΠΈΡ .
AWT — Π½Π°Π±ΠΎΡ ΠΊΠ»Π°ΡΡΠΎΠ² Java, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (GUI). ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠ°ΠΌΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Component. ΠΠΈΡΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ΅Π½Ρ Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° — MenuComponent. Π£ΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ:
? Button (ΠΊΠ½ΠΎΠΏΠΊΠ°);
? Checkbox (ΠΊΠ½ΠΎΠΏΠΊΠ° Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΉ ΡΠΈΠΊΡΠ°ΡΠΈΠ΅ΠΉ);
? Choice (ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΠΈΠΉΡΡ ΡΠΏΠΈΡΠΎΠΊ Windows);
? Label (ΡΡΡΠΎΠΊΠ°);
? List (ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ±ΠΎΡΠ° Windows);
?Scrollbar (ΠΏΠΎΠ»ΠΎΡΠ° ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ).
ΠΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ΅ ΠΊΠ»Π°ΡΡΡ, Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΠΌΡΠ΅ ΠΎΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Component Π½Π°ΠΏΡΡΠΌΡΡ.
ΠΠ΄Π½Π°ΠΊΠΎ Π² ΡΠΎΡΡΠ°Π²Π΅ java. awt ΠΈΠΌΠ΅ΡΡΡΡ ΠΊΠ»Π°ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΈΠΌΠ΅ΡΡΠΈΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΠΊΠ°. Π₯ΠΎΡΠΎΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΠΎΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡ Panel Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ. Π£ Π½Π΅Π³ΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ-ΠΏΡΠ΅Π΄ΠΎΠΊ Container, ΡΠ»ΡΠΆΠ°ΡΠΈΠΉ ΡΠΎΠ΄ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΈΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ², ΡΠΏΠΎΡΠΎΠ±Π½ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π² ΡΠ΅Π±Π΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΡ ΡΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡ ΠΎΠΊΠ½Π° Window, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅Π΅ ΠΎΠΊΠ½ΠΎ Π±Π΅Π· ΠΌΠ΅Π½Ρ ΠΈ ΡΠ°ΠΌΠΊΠΈ. Π£ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π΅ΡΡΡ Π΄Π²Π° ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠ°: Dialog, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅Π±Ρ, ΠΈ Frame — ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Windows. ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ TextComponent ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ Π΄Π²Π° ΠΏΠΎΠ»Π΅Π·Π½Π΅ΠΉΡΠΈΡ Π² ΡΠ°Π±ΠΎΡΠ΅ ΠΊΠ»Π°ΡΡΠ° — TextField (Π°Π½Π°Π»ΠΎΠ³ ΡΡΡΠΎΠΊΠΈ Π²Π²ΠΎΠ΄Π° Windows) ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° TextArea. ΠΡΠΎΠ±Π½ΡΠΊΠΎΠΌ ΠΎΡ Π²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠΎΠΈΡ ΠΊΠ»Π°ΡΡ Canvas. ΠΠ³ΠΎ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ — ΠΏΡΡΡΠΎΠΉ ΠΊΠ²Π°Π΄ΡΠ°Ρ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΌΡΡΠΈ.
ΠΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄ΠΊΠ° Component Π²ΡΠ΅ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΈΠΌΠ°ΡΡ ΠΎΠ±ΡΠ΅Π΅ Π΄Π»Ρ Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ΅ Ρ ΠΈΡ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π°ΠΌΠΈ. ΠΠΎΡ ΡΠΏΠΈΡΠΎΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ , Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ, ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
?ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΡΡΠ° — ΠΌΠ΅ΡΠΎΠ΄Ρ getFont, setFont, getFontMetrics;
?ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠ° ΡΡΠΈΡΡΠ° — ΠΌΠ΅ΡΠΎΠ΄Ρ setForeground (Color) ΠΈ getForeground () — Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ ΡΡΠ΅Π½ΠΈΡ ΡΠ²Π΅ΡΠ° ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΡΠΈΡΡΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ setBackground (Color) ΠΈ getBackground () Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ΅Π½ΠΈΡ ΡΠ²Π΅ΡΠ° ΡΠΎΠ½Π°, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠ΅ΠΊΡΡ;
?ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ — ΠΌΠ΅ΡΠΎΠ΄Ρ preferredSize () ΠΈ minimumSize () ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΎΠΊ ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ;
?ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° — ΠΌΠ΅ΡΠΎΠ΄Ρ paint (), update () ΠΈ repaint ();
?ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ — ΠΌΠ΅ΡΠΎΠ΄Ρ handleEvent (), action (), keyDown (), keyUp (), mouseDown (), mouseUp (), mouseDrag (), mouseMove (), mouseEnter () ΠΈ mouseExit ().
1.2 Π Π°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π²Π½ΡΡΡΠΈ ΠΎΠΊΠΎΠ½-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ², Π² Java ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΎΠΊ (layout manager). ΠΡ Π½Π΅Π³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΡ ΡΠΎΡ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΡΠΈΠΏ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π² ΠΎΠΊΠ½Π΅. ΠΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΈΠΏ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΎΡ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΊΠ»Π°ΡΡ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠΈ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡΠ°ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΈ ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ setLayout (), ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΠΉ ΡΠ΅ΠΊΡΡΡΡ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΡ:
// Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π²Π΄ΠΎΠ»Ρ ΡΠ°ΠΌΠΊΠΈ ΠΎΠΊΠ½Π°
setLayout (new BorderLayout ());
ΠΠ°Π΄ΠΈΠΌ ΠΊΡΠ°ΡΠΊΡΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΡ ΠΊΠ»Π°ΡΡΠ°ΠΌ-ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠ°ΠΌ.
FlowLayout. ΠΡΠΎ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄ΡΡΠ³ΠΈΠΌ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠΎΠ³Π΄Π° Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΡΠΆΠ΅ Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ Ρ Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
CardLayout. ΠΡΠΈ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄ΡΡΠ³ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΊΠ°ΡΡΡ Π² ΠΊΠΎΠ»ΠΎΠ΄Π΅. ΠΠ±ΡΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΠ°ΡΠΊΠ»Π°Π΄ ΡΠ΄ΠΎΠ±Π΅Π½, Π΅ΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΎΠΊΠ½Π°. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ Π½Π°Π΄ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
BorderLayout. ΠΡΠ° ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠ° ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π»ΠΈΠ±ΠΎ ΡΡΠ΄ΠΎΠΌ Ρ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΌ ΠΊΡΠ°Π΅ΠΌ ΠΎΠΊΠ½Π°, Π»ΠΈΠ±ΠΎ Π² ΡΠ΅Π½ΡΡΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ BorderLayout Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΎΠΊΠ½ΠΎ-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ add () Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠΌ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ North, South, East, West ΠΈ Center. ΠΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· Π½ΠΈΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΎΡ ΠΊΡΠ°ΠΉ ΠΎΠΊΠ½Π°, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΈΠΆΠ°ΡΡ Π²ΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.
GridLayout ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄ΡΡΠ³ΠΈΠΌ Π²Π½ΡΡΡΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ. ΠΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π±ΡΠ΄ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅Π΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ.
GridBagLayout. ΠΡΠΎ ΡΠ°ΠΌΠ°Ρ ΠΌΠΎΡΠ½Π°Ρ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠ°. ΠΠ½Π° ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² ΡΠ»ΡΡΠ°Π΅ Ρ GridLayout. ΠΠΎ Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ, Π² ΡΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Π°ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ, Π½ΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π½Π°Π±ΡΠ°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ ΠΎΠ΄Π½Ρ ΡΡΡΠΎΡΠΊΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ°.
1.3 ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ Π‘ΠΎΠ±ΡΡΠΈΠ΅ (event) Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ AWT Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΈ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΡΠΌΠΈ ΠΌΡΡΡΡ, ΠΏΡΠΈ Π²Π²ΠΎΠ΄Π΅ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΎΠΊΠ½Π°, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ².
ΠΠ±ΡΠ΅ΠΊΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ (source) ΡΠΎΠ±ΡΡΠΈΡ.
ΠΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ Π² AWT ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Ρ. ΠΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Java Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΠΎΠ½ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΡΠ°Π½ΠΈΡ Π²ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠΎΠ±ΡΡΠΈΠΈ.
ΠΠΎ Π³Π»Π°Π²Π΅ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΠΊΠ»Π°ΡΡΠΎΠ²-ΡΠΎΠ±ΡΡΠΈΠΉ ΡΡΠΎΠΈΡ ΠΊΠ»Π°ΡΡ Eventobject ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° java. util — Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° object. ΠΠ³ΠΎ ΡΠ°ΡΡΠΈΡΡΠ΅Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ AWTEvent ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° java. awt — Π³Π»Π°Π²Π° ΠΊΠ»Π°ΡΡΠΎΠ², ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΡ ΡΠΎΠ±ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ AWT. ΠΠ°Π»ΡΠ½Π΅ΠΉΡΠ°Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²-ΡΠΎΠ±ΡΡΠΈΠΉ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° ΡΠΈΡ. 1.1. ΠΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π½ΡΠ΅ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅, ΠΊΡΠΎΠΌΠ΅ ΠΊΠ»Π°ΡΡΠ° AWTEvent, ΡΠΎΠ±ΡΠ°Π½Ρ Π² ΠΏΠ°ΠΊΠ΅Ρ java.awt.event.
Π‘ΠΎΠ±ΡΡΠΈΡ ΡΠΈΠΏΠ° ComponentEvent, FocusEvent, KeyEvent, MouseEvent Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π²ΠΎ Π²ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ .
Π ΡΠΎΠ±ΡΡΠΈΡ ΡΠΈΠΏΠ° ContainerEvent — ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ : Container, Dialog, FileDialog, Frame, Panel, ScrollPane, Window.
Π ΠΈΡ. 1. ΠΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΡ ΡΠΎΠ±ΡΡΠΈΡ AWT
Π‘ΠΎΠ±ΡΡΠΈΡ ΡΠΈΠΏΠ° WindowEvent Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π’ΠΠΠ¬ΠΠ Π² ΠΎΠΊΠ½Π°Ρ : Frame, Dialog, FileDialog, Window.
Π‘ΠΎΠ±ΡΡΠΈΡ ΡΠΈΠΏΠ° TextEvent Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ TextComponent, TextArea, TextField.
Π‘ΠΎΠ±ΡΡΠΈΡ ΡΠΈΠΏΠ° ActionEvent ΠΏΡΠΎΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ Button, List, TextField.
Π‘ΠΎΠ±ΡΡΠΈΡ ΡΠΈΠΏΠ° ItemEvent Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ Checkbox, Choice, List.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΠΎΠ±ΡΡΠΈΡ ΡΠΈΠΏΠ° AdjustmentEvent Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ Scrollbar.
Π£Π·Π½Π°ΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ getsource ΠΊΠ»Π°ΡΡΠ° Eventobject. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΠΏ object.
Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²-ΡΠΎΠ±ΡΡΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄ paramstring (), Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ string. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ Π΅ΡΡΡ ΡΠ²ΠΎΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠΎΠ±ΡΡΠΈΠΈ.
ΠΠ΅ΡΠΎΠ΄Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°Ρ -ΡΠ»ΡΡΠ°ΡΠ΅Π»ΡΡ (listener). ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° ΡΠΈΡ. 1.1 ΡΠΈΠΏΠ° ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΊΡΠΎΠΌΠ΅ InputEvent (ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ), Π΅ΡΡΡ ΡΠ²ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠΌΠ΅Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΡΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ ΡΠΎΠ±ΡΡΠΈΡ ΠΈ ΡΠ»ΠΎΠ²Π° Listener, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ActionListener, MouseListener. ΠΠ΅ΡΠΎΠ΄Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° «ΡΠ»ΡΡΠ°ΡΡ», ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΡ. ΠΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΡ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, ΠΏΠΎΠ»ΡΡΠ°Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡ-ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠΎΠ±ΡΡΠΈΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ΡΡ Π² ΡΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅.
Π§ΡΠΎΠ±Ρ Π·Π°Π΄Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠ±ΡΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Π½Π°Π΄ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠ»Π°ΡΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΊΠ»Π°ΡΡΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ (handlers) ΡΠΎΠ±ΡΡΠΈΡ, Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΡΠ»ΡΡΠ°ΡΠ΅Π»ΡΠΌΠΈ (listeners): ΠΎΠ½ΠΈ «ΡΠ»ΡΡΠ°ΡΡ», ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΡΡΠΎΠ±Ρ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΅Π³ΠΎ.
Π§ΡΠΎΠ±Ρ ΡΠ²ΡΠ·Π°ΡΡΡΡ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠ»Π°ΡΡΡ-ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ EventHandler ΠΊΠ»Π°ΡΡΠ°-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΎΠ±ΡΡΠΈΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² addXxxListener (XxxEvent eventHandier), Π³Π΄Π΅ Π₯Ρ Ρ — ΠΈΠΌΡ ΡΠΎΠ±ΡΡΠΈΡ.
Π’Π°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°ΡΠ΅Π»Ρ ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ «Π²ΠΈΠ·ΠΈΡΠ½ΡΡ ΠΊΠ°ΡΡΠΎΡΠΊΡ» ΠΈΡΡΠΎΡΠ½ΠΈΠΊΡ Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΏΡΠΈ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΡ, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² (callback). ΠΠ±ΡΠ°ΡΠ½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ — ΠΎΡΠΊΠ°Π· ΠΎΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΡ — Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ removeXxxListener ().
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ-ΠΈΡΡΠΎΡΠ½ΠΈΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅, Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ Π΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ. ΠΠ½ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΠ°-ΡΠ»ΡΡΠ°ΡΠ΅Π»Ρ, ΡΠΌΠ΅ΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ, Π΄Π΅Π»Π΅Π³ΠΈΡΡΠ΅Ρ (delegate) Π΅ΠΌΡ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡΠΈΡ ΠΏΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅.
Π’Π°ΠΊΠ°Ρ ΡΡ Π΅ΠΌΠ° ΠΏΠΎΠ»ΡΡΠΈΠ»Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΡ Π΅ΠΌΡ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (delegation). ΠΠ½Π° ΡΠ΄ΠΎΠ±Π½Π° ΡΠ΅ΠΌ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠΌΠ΅Π½ΠΈΡΡ ΠΊΠ»Π°ΡΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΠΎ-Π΄ΡΡΠ³ΠΎΠΌΡ ΠΈΠ»ΠΈ Π½Π°Π·Π½Π°ΡΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΎΠ±ΡΡΠΈΡ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π°Π·Π½Π°ΡΠΈΡΡ Π½Π° ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²-ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ.
ΠΡΠ° ΡΡ Π΅ΠΌΠ° ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ, Π½ΠΎ Π΅ΠΉ ΡΠ°ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΆΠΈΠ·Π½ΠΈ. ΠΠΎΠΏΡΡΡΠΈΠΌ, ΠΊΡΠΎ-ΡΠΎ ΡΠ΅ΡΠΈΠ» ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°ΡΡ ΠΊΠ²Π°ΡΡΠΈΡΡ. ΠΠ½ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π² Π½Π΅Π΅, ΠΊΠ°ΠΊ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΡΠ°Π·Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ: ΠΌΠ΅Π±Π΅Π»Ρ, ΡΠ°Π½ΡΠ΅Ρ Π½ΠΈΠΊΡ, ΡΠ»Π΅ΠΊΡΡΠΎΠ½ΠΈΠΊΡ, Π°Π½ΡΠΈΠΊΠ²Π°ΡΠΈΠ°Ρ. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ — ΠΊΠ²Π°ΡΡΠΈΡΡ ΠΏΠΎΡΠ΅ΡΡΡ Π²ΠΎΡΡ, — ΠΈ Ρ ΠΎΠ·ΡΠΈΠ½ Ρ ΠΎΡΠ΅Ρ Π΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΊΠ»Π°ΡΡΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ — ΠΎΡ ΡΠ°Π½Π½ΡΠ΅ Π°Π³Π΅Π½ΡΡΡΠ²Π°, — ΡΠΎΠ³Π΄Π° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ-ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΡ, Ρ. Π΅. ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΊΡΠ°Π΄Π΅Π½Ρ, ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡ ΠΊ ΡΠ΅Π±Π΅ Π΄Π°ΡΡΠΈΠΊΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ addXxxListener (). ΠΠ°ΡΠ΅ΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ «ΡΠ»ΡΡΠ°Π΅Ρ», ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ , ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ½ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½. ΠΠ½ ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ Π½Π° Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ — ΠΏΠΎΡ ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, — ΠΏΡΠΎΡΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΠΊΠΎΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±ΡΡΠ² Π²ΠΎΠ΄ΠΎΠΏΡΠΎΠ²ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠ±Ρ, Π΅Π³ΠΎ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ. ΠΡΠΈ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ «ΡΠ²ΠΎΠ΅Π³ΠΎ» ΡΠΎΠ±ΡΡΠΈΡ ΠΎΠ½ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΏΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ, Π·Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΌΡ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΠ»Π°Π²Π° 2. Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ «ΠΠΎΠΌΠΈΠ½ΠΎ»
2.1 ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ Π‘ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π·Π΄Π°Π΅Ρ ΠΈΠ³ΡΠΎΠΊΠ°ΠΌ ΠΊΠΎΡΡΠΈ Π΄Π»Ρ ΠΈΠ³ΡΡ Π² Π΄ΠΎΠΌΠΈΠ½ΠΎ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΠ΅Ρ ΠΈΠ³ΡΡ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π²ΡΡΡΡΠΏΠ°ΡΡ ΠΊΠΎΡΡΠΈ Π΄ΠΎΠΌΠΈΠ½ΠΎ. ΠΠ΅ΡΠΎΠ΄Ρ — Π²ΡΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΡΠΈ Π² ΡΠΎΡ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠ½Π΅Ρ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΠΊΠΎΡΡΠ΅ΠΉ. ΠΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠΈΡΡΠ°ΡΠΈΠΈ «ΡΡΠ±Π°» .
2.2 ΠΠ±ΡΠ΅ΠΊΡΠ½Π°Ρ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π½Π° Π ΠΈΡΡΠ½ΠΊΠ΅ 2 Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ ΠΊΠ»Π°ΡΡΠΎΠ².
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡ ΠΊΠΎΡΡΠ΅ΠΉ — Bone, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄ΡΡ Π·Π°Π΄Π°Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠΎΠ»Ρ:
ΠΠΎΠ»Ρ X ΠΈ Y — ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠΎΡΠΊΠΈ, Π·Π°Π΄Π°ΡΡΠΈΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅Π½ΡΡΠ° ΠΊΠΎΡΡΠΈ Π΄ΠΎΠΌΠΈΠ½ΠΎ Π½Π° ΡΠΊΡΠ°Π½Π΅.
ΠΠΎΠ»Ρ dirX ΠΈ dirY — Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π° ΠΊΠΎΡΡΡ Π΄ΠΎΠΌΠΈΠ½ΠΎ Π½Π° ΡΠΊΡΠ°Π½Π΅.
ΠΠΎΠ»Ρ points1 ΠΈ points2 — ΠΎΡΠΊΠΈ Π½Π° ΠΊΠΎΡΡΠΈ Π΄ΠΎΠΌΠΈΠ½ΠΎ Ρ Π»Π΅Π²ΠΎΠΉ ΠΈ ΠΏΡΠ°Π²ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ.
Π ΡΡΠΎΠΌ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ ΠΌΠ΅ΡΠΎΠ΄ show (), ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΡΠΈ Π΄ΠΎΠΌΠΈΠ½ΠΎ Π½Π° ΡΠΊΡΠ°Π½Π΅.
ΠΡΠΎΠΌΠ΅ ΠΊΠ»Π°ΡΡΠ° Bone Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠΎΠ·Π΄Π°Π½ ΠΊΠ»Π°ΡΡ MainFrame, Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊ ΠΊΠ»Π°ΡΡΠ° Frame.
Π ΠΊΠ»Π°ΡΡΠ΅ MainFrame ΠΎΠΏΠΈΡΠ°Π½ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ main ().
Π ΠΌΠ΅ΡΠΎΠ΄Π΅ main () Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²-ΠΊΠΎΡΡΠ΅ΠΉ Π΄ΠΎΠΌΠΈΠ½ΠΎ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π½ΠΎΡΡΡΡΡ Π² ArrayListplayerBones. Π ΡΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ (Listener) ΠΊΠ½ΠΎΠΏΠΎΠΊ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠ°ΡΠ°ΡΡ» Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΊΠΎΡΡΠ΅ΠΉ Π΄ΠΎΠΌΠΈΠ½ΠΎ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ ΠΈΠ³ΡΠΎΠΊΠ°ΠΌ. ΠΠ΅ΡΠ²ΡΠΌ Ρ ΠΎΠ΄ΠΈΡ ΡΠΎΡ, Ρ ΠΊΠΎΠ³ΠΎ Π½Π° ΡΡΠΊΠ°Ρ ΠΊΠΎΡΡΡ {1, 1}. ΠΠ°Π»Π΅Π΅ ΠΈΠ³ΡΠΎΠΊΠΈ Π΄Π΅Π»Π°ΡΡ Ρ ΠΎΠ΄Ρ, ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ Π²ΡΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΠΏΡ. ΠΠ³ΡΠ° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΡΡΡΠΏΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΡ «Π ΡΠ±Π°» ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΈΠ³ΡΠΎΠΊΠΎΠ² Π½Π΅ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡ ΠΎΡ Π²ΡΠ΅Ρ ΡΠΈΡΠ΅ΠΊ Π½Π° ΡΠ²ΠΎΠΈΡ ΡΡΠΊΠ°Ρ .
Π ΠΈΡ. 2. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΌ ΠΊΡΡΡΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π±ΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠΎΠ½ΡΡΠΈΡ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Java, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠ°ΡΠ°ΡΡΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ.
ΠΠ° Java Π½Π°ΠΌΠΈ Π±ΡΠ»Π° Π½Π°ΠΏΠΈΡΠ°Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π½Π°ΡΡΠΎΠ»ΡΠ½ΡΡ ΠΈΠ³ΡΡ «ΠΠΎΠΌΠΈΠ½ΠΎ».
ΠΠ°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΈΠ³ΡΡ, ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π²ΠΈΡΡ ΡΡΠΎ ΠΈΠ³ΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ³ΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΏΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ.
Π‘ΠΏΠΈΡΠΎΠΊ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ
ΠΠ°ΡΠΈΠ»ΡΠ΅Π² Π. Π. ΠΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΠΌΠ°Π³ΠΈΡΡΡΠΎΠ² ΠΈ Π±Π°ΠΊΠ°Π»Π°Π²ΡΠΎΠ²: Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΡΡΡ ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. — Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³, ΠΠΈΡΠ΅Ρ, 2011 Π³ — 396 Ρ.
ΠΡΡΡ ΠΠΊΠΊΠ΅Π»Ρ. Π€ΠΈΠ»ΠΎΡΠΎΡΠΈΡ Java. — Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³, ΠΠΈΡΠ΅Ρ, 2009 Π³- 640 Ρ.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. Π’Π΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈΠ³ΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΌΠΈΠ½ΠΎ
package domino;
import java.awt.*;
/ * ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π΄Π°Π΅Ρ ΠΊΠΎΡΡΡ ΠΊΠ°ΠΊ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, ΡΠ°ΠΊ ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ
public class Bone {
static final byte width = 32;
static final byte height = width * 2;
static final byte pointSize = 6;
static final Color colorMarked = Color. RED;
static final Color colorBack = Color. WHITE;
static final Color colorPoint = Color. BLUE;
private byte points1, points2;
private int X, Y;
private byte dirX, dirY;
static byte[][][] pointCoords = {
{},
{{0, 0}},
{{-1, -1}, {+1, +1}},
{{-1, -1}, {0, 0}, {+1, +1}},
{{-1, -1}, {+1, -1}, {-1, +1}, {+1, +1}},
{{-1, -1}, {+1, -1}, {-1, +1}, {+1, +1}, {0, 0}},
{{-1, -1}, {+1, -1}, {-1, +1}, {+1, +1}, {0, -1}, {0, +1}}
};
private boolean isMarked;
Bone (byte p1, byte p2) {
points1 = p1;
points2 = p2;
isMarked = false;
}
int getX () {
return X;
}
int getY () {
return Y;
}
/**
* ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎ X
*/
int getSizeX () {
if (dirX ≠ 0) {
return height;
} else {
return width;
}
}
Bone setColorMarked () {
isMarked = true;
return this;
}
Bone setColorUsual () {
isMarked = false;
return this;
}
/**
* ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎ Y
*/
int getSizeY () {
if (dirX ≠ 0) {
return width;
} else {
return height;
}
}
/**
* ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠΊΠΎΠ² ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ
*/
byte points (int side) {
if (side == 0) {
return points1;
}
if (side == 1) {
return points2;
}
return -1;
} /**
* ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΡΡΠΈ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΈΠΊΠΎΡΠ½ΠΎΠ²Π΅Π½ΠΈΡ
*/
int[] getBounds () {
int sx = getSizeX (), sy = getSizeY ();
return new int[]{X — sx / 2, X + sx / 2, Y — sy / 2, Y + sy / 2};
}
/**
* ΠΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΊΠΎΡΡΡ
*/
void show (Graphics G) {
int sx = getSizeX (), sy = getSizeY ();
G.setColor (colorBack);
G.fillRect (X — sx / 2, Y — sy / 2, sx, sy);
if (isMarked) {
G.setColor (colorMarked);
} else {
G.setColor (colorPoint);
}
G.drawRect (X — sx / 2, Y — sy / 2, sx — 1, sy — 1);
G.setColor (colorPoint);
if (dirX ≠ 0) {
G.drawLine (X, Y — sy / 2 + 3, X, Y + sy / 2 — 4);
} else {
G.drawLine (X — sx / 2 + 3, Y, X + sx / 2 — 4, Y);
}
int x1 = X — dirX * sx / 4, y1 = Y — dirY * sy / 4;
for (int s = 1; s <= 2; s++) {
int p = points1;
if (s == 2) p = points2;
for (int i = 0; i < p; i++) {
//int d=width*i/(p+1)-pointSize/2;
int dx = pointCoords[p][i][0] * width / 4;
int dy = pointCoords[p][i][1] * width / 4;
G.fillOval (x1 + dx — pointSize / 2, y1 + dy — pointSize / 2,
pointSize, pointSize);
}
x1 += dirX * sx / 2;
y1 += dirY * sy / 2;
}
}
/**
* Π‘ΠΏΡΡΡΠ°ΡΡ ΠΊΠΎΡΡΡ
*/
void hide (Graphics G, Color back) {
G.setColor (back);
int sx = getSizeX (), sy = getSizeY ();
G.fillRect (X — sx / 2, Y — sy / 2, sx, sy);
}
/**
* ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΡΠΈ Π½Π° Π΄ΠΎΡΠΊΠ΅
*/
void moveTo (int x, int y, Graphics G, Color back) {
hide (G, back);
this.X = x;
this.Y = y;
show (G);
}
/**
* ΠΠΎΠ²ΠΎΡΠΎΡ ΠΊΠΎΡΡΠΈ Π½Π° Π΄ΠΎΡΠΊΠ΅
*/
void rotate (int dirX, int dirY, Graphics G, Color back) {
assert dirX >= -1 && dirX <= +1 && dirY >= -1 && dirY <= +1;
hide (G, back);
this.dirX = (byte) dirX;
this.dirY = (byte) dirY;
show (G);
}
/**
* ΠΠ»Π°Π²Π½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΡΠΈ Π½Π° Π΄ΠΎΡΠΊΠ΅
*/
void moveSliding (int x2, int y2, int time, Graphics G, Color back) {
int x1 = getX (), y1 = getY ();
int dt = 1000 / 25;
int n = time / dt;
for (int p = 1; p <= n; p++) {
int xp = x1 + (x2 — x1) * p / n;
int yp = y1 + (y2 — y1) * p / n;
moveTo (xp, yp, G, back);
long t = System. currentTimeMillis ();
do {
} while (System.currentTimeMillis () — t < dt);
}
}
}
package domino;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
public class MainFrame extends Frame {
private Graphics graphics;
private Color backgroundColor;
private final static int PLAYERS_COUNT = 4;
private final static int MAX_BONES_COUNT = 7;
private final static int MAX_BONE_VALUE = 6;
private int currentPlayerIdx;
private int passesCount = 0;
private int[] placeJ = new int[2];
private int[] placeK = new int[2];
private int[] rotationJ = new int[2];
private int[] rotationK = new int[2];
private byte[] endPoints = new byte[2];
private ArrayList[] playersBones = new ArrayList[PLAYERS_COUNT];
private ArrayList bonesOnTheDesk;
private boolean selected;
private int selectedIdx;
private boolean gameStarted;
private boolean isHandling;
private boolean isChoosingBone;
private int selectedOnBoard;
public MainFrame () {
initComponents ();
graphics = this. getGraphics ();
backgroundColor = getBackground ();
}
/**
* Π‘ΡΡΠΎΠΊΠ°, Π²ΡΠ²ΠΎΠ΄ΡΡΠ°Ρ ΠΊΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΠΈΠ³ΡΠ°Π΅Ρ
*/
private String getCurrentPlayer () {
return «Π’Π΅ΠΊΡΡΠΈΠΉ ΠΈΠ³ΡΠΎΠΊ: «+ («Π§Π΅Π»ΠΎΠ²Π΅ΠΊ β» + (currentPlayerIdx + 1));
}
/**
* ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°
*/
private void updateAppTitle () {
setTitle («ΠΠΎΠΌΠΈΠ½ΠΎ. «+ getCurrentPlayer ());
}
/**
* ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π°Π²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ
*/
private void initComponents () {
Button buttonStart = new Button ();
Button buttonStop = new Button ();
setBackground (new Color (102, 102, 0));
setCursor (new Cursor (Cursor.HAND_CURSOR));
setLocationRelativeTo (null);
setResizable (false);
updateAppTitle ();
selected = false;
isHandling = false;
addWindowListener (new WindowAdapter () {
public void windowActivated (WindowEvent evt) {
formWindowActivated (evt);
}
public void windowClosing (WindowEvent evt) {
exitForm (evt);
}
public void windowOpened (WindowEvent evt) {
formWindowOpened (evt);
}
});
// ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°Π΅ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ°
addMouseListener (new MouseListener () {
public void mouseClicked (MouseEvent e) {
}
public void mousePressed (MouseEvent e) {
}
public synchronized void mouseReleased (MouseEvent e) {
if (isChoosingBone) {
int x = e. getX ();
int y = e. getY ();
selectedOnBoard = selectOnBoard (x, y);
doMove ();
} else if (!isHandling && gameStarted && !selected) {
isHandling = true;
int x = e. getX ();
int y = e. getY ();
selectedIdx = selectBone (x, y);
selected = (selectedIdx ≠ -1);
doMove ();
isHandling = false;
}
}
public void mouseEntered (MouseEvent e) {
}
public void mouseExited (MouseEvent e) {
}
});
addComponentListener (new ComponentAdapter () {
public void componentShown (ComponentEvent evt) {
formComponentShown (evt);
}
});
buttonStart.setLabel («ΠΠ°ΡΠ°ΡΡ»);
buttonStart.addActionListener (new ActionListener () {
public void actionPerformed (ActionEvent evt) {
gameStarted = true;
startButtonListener (evt);
}
});
buttonStop.setLabel («Π‘ΡΠΎΠΏ»);
buttonStop.addActionListener (new ActionListener () {
public void actionPerformed (ActionEvent evt) {
gameStarted = false;
stopButtonListener (evt);
}
});
GroupLayout layout = new GroupLayout (this);
this.setLayout (layout);
layout.setHorizontalGroup (layout.createParallelGroup (GroupLayout.Alignment.LEADING)
.addGroup (layout.createSequentialGroup ()
.addContainerGap ()
.addComponent (buttonStart, GroupLayout. PREFERRED_SIZE, GroupLayout. DEFAULT_SIZE, GroupLayout. PREFERRED_SIZE)
.addPreferredGap (LayoutStyle.ComponentPlacement.RELATED)
.addComponent (buttonStop, GroupLayout. PREFERRED_SIZE, 52, GroupLayout. PREFERRED_SIZE)
.addContainerGap (355, Short. MAX_VALUE))
); layout. setVerticalGroup (layout.createParallelGroup (GroupLayout.Alignment.LEADING)
.addGroup (layout.createSequentialGroup ().addContainerGap ().addGroup (layout.createParallelGroup (GroupLayout.Alignment.LEADING)
.addComponent (buttonStop, GroupLayout. PREFERRED_SIZE, 37, GroupLayout. PREFERRED_SIZE)
.addComponent (buttonStart, GroupLayout. PREFERRED_SIZE, 37, GroupLayout. PREFERRED_SIZE))
.addContainerGap (323, Short. MAX_VALUE))
);
pack ();
}
private int selectOnBoard (int x, int y) {
int[] bounds = (bonesOnTheDesk.get (0).getBounds ());
if (x > bounds[0] && x < bounds[1] && y > bounds[2] && y < bounds[3]) {
return 0;
}
bounds = (bonesOnTheDesk.get (bonesOnTheDesk.size () — 1).getBounds ());
if (x > bounds[0] && x < bounds[1] && y > bounds[2] && y < bounds[3]) {
return bonesOnTheDesk. size ();
}
return -1;
}
// ΠΏΠΎΠΏΡΡΠΊΠ° Π²Π·ΡΡΡ ΠΊΠΎΡΡΡ ΠΈΠ³ΡΠΎΠΊΠ° ΠΏΠΎ Π΄Π°Π½Π½ΡΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌ
private int selectBone (int x, int y) {
for (int i = 0; i < playersBones[currentPlayerIdx]. size (); i++) {
Bone bone = playersBones[currentPlayerIdx]. get (i);
int[] bounds = (bone.getBounds ());
if (x > bounds[0] && x < bounds[1] && y > bounds[2] && y < bounds[3]) {
return i;
}
}
return -1;
}
private void exitForm (WindowEvent evt) {
System.exit (0);
}
private void formWindowOpened (WindowEvent evt) {
}
private void formWindowActivated (WindowEvent evt) {
}
private void formComponentShown (ComponentEvent evt) {
}
// ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΡΡΠ΅ΠΉ ΠΈ ΡΠ°Π·Π΄Π°ΡΠ° ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ°ΠΌ
private void initBones () {
ArrayList bonesPool = new ArrayList ();
bonesPool.clear ();
for (byte p = 0; p <= MAX_BONE_VALUE; p++) {
for (byte q = 0; q <= p; q++) {
bonesPool.add (new Bone (p, q));
}
}
for (int i = 0; i < PLAYERS_COUNT; i++) {
playersBones[i] = new ArrayList ();
}
bonesOnTheDesk = new ArrayList ();
for (int i = 0; i < MAX_BONES_COUNT; i++) {
for (int p = 0; p < PLAYERS_COUNT; p++) {
int k = (int) (Math.random () * bonesPool. size ());
playersBones[p]. add (bonesPool.get (k));
bonesPool.remove (k);
}
}
}
// ΡΠΎ ΡΡΠΎ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅
private void startButtonListener (ActionEvent evt) {
graphics.clearRect (0, 0, getWidth (), getHeight ());
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΏΡΠ» ΠΊΠΎΡΡΠ΅ΠΉ ΠΈ ΡΠ°Π·Π΄Π°Π΅ΠΌ ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ³ΡΠΎΠΊΠ°ΠΌΠΈ
initBones ();
// Π Π°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠΎΡΡΠΈ ΠΈΠ³ΡΠΎΠΊΠΎΠ² Π½Π° ΡΠΊΡΠ°Π½Π΅
for (int p = 0; p < PLAYERS_COUNT; p++) {
for (int i = 0; i < MAX_BONES_COUNT; i++) {
Bone bone = playersBones[p]. get (i);
int x = 0, y = 0;
int dx = 0, dy = 0;
switch (p) {
case 0:
x = this. getWidth () / 2 — Bone. width * 7;
y = this. getHeight () — Bone. width;
dx = (Bone.height + 10);
dy = 0;
bone.rotate ((byte) 1, (byte) 0, graphics, backgroundColor);
break;
case 1:
x = Bone. width;
y = 120;
dx = 0;
dy = Bone. height + 10;
bone.rotate ((byte) 0, (byte) 1, graphics, backgroundColor);
break;
case 2:
x = this. getWidth () / 2 — Bone. width * 7;
y = 30 + Bone. width;
dx = (Bone.height + 10);
dy = 0;
bone.rotate ((byte) -1, (byte) 0, graphics, backgroundColor);
break;
case 3:
x = this. getWidth () — Bone. width;
y = 120;
dx = 0;
dy = Bone. height + 10;
bone.rotate ((byte) 0, (byte) -1, graphics, backgroundColor);
break;
}
bone.moveTo (x + i * dx, y + i * dy, graphics, backgroundColor);
}
}
int idxOfFirstPlayingPlayer = -1;
for (int n = 1; n <= MAX_BONE_VALUE; n++) {
for (int p = 0; p < PLAYERS_COUNT; p++) {
for (int i = 0; i < playersBones[p]. size (); i++) {
Bone bone = playersBones[p]. get (i);
if (bone.points (0) == n && bone. points (1) == n) {
currentPlayerIdx = p;
idxOfFirstPlayingPlayer = i;
}
}
}
if (currentPlayerIdx >= 0) break;
}
int pause = 2000;
long t = System. currentTimeMillis ();
do {
} while (System.currentTimeMillis () — t < pause);
Bone bone = playersBones[currentPlayerIdx]. get (idxOfFirstPlayingPlayer);
bone.rotate (1, 0, graphics, backgroundColor);
bone.moveSliding (getWidth () / 2, getHeight () / 2, 500, graphics, backgroundColor);
bonesOnTheDesk.add (bone);
playersBones[currentPlayerIdx]. remove (idxOfFirstPlayingPlayer);
currentPlayerIdx = (currentPlayerIdx + 1) % PLAYERS_COUNT;
updateAppTitle ();
placeJ[0] = bone. getX ();
placeJ[1] = bone. getX ();
placeK[0] = bone. getY ();
placeK[1] = bone. getY ();
rotationJ[0] = -1;
rotationJ[1] = +1;
rotationK[0] = 0;
rotationK[1] = 0;
endPoints[0] = bone. points (0);
endPoints[1] = bone. points (1);
isChoosingBone = false;
doMove ();
}
private synchronized void doMove () {
int x2, y2;
Bone bone = null;
int side = -1;
boolean isShouldReturn;
if (isChoosingBone) {
isChoosingBone = false;
isShouldReturn = false;
bone = playersBones[currentPlayerIdx]. get (selectedIdx);
highlightBones (bone, false);
if (selectedOnBoard == -1) {
return;
} else {
bonesOnTheDesk.add (selectedOnBoard, bone);
playersBones[currentPlayerIdx]. remove (selectedIdx);
side = (selectedOnBoard == 0)? 0: 1;
selected = false;
}
} else if (!hasMoves ()) {
passesCount++;
currentPlayerIdx = (currentPlayerIdx + 1) % PLAYERS_COUNT;
getToolkit ().beep ();
updateAppTitle ();
doMove ();
return;
} else if (!selected) {
isShouldReturn = true;
} else {
bone = playersBones[currentPlayerIdx]. get (selectedIdx);
isShouldReturn = true;
if ((endPoints[0] ≠ endPoints[1]) && (bone.points (0) == endPoints[0] && bone. points (1) == endPoints[1]) || (bone.points (1) == endPoints[0] && bone. points (0) == endPoints[1])) {
highlightBones (bone, true);
isChoosingBone = true;
selected = false;
return;
}
for (side = 0; side <= 1; side++) {
if (bone.points (0) == endPoints[side] ||
bone.points (1) == endPoints[side]) {
if (side == 0) {
bonesOnTheDesk.add (0, bone);
} else {
bonesOnTheDesk.add (bonesOnTheDesk.size (), bone);
}
playersBones[currentPlayerIdx]. remove (selectedIdx);
isShouldReturn = false;
break;
}
}
selected = false;
}
if (isShouldReturn) {
return;
}
boolean stop = false;
if (bone.points (0) == endPoints[side]) {
bone.rotate (+rotationJ[side], +rotationK[side], graphics, backgroundColor);
endPoints[side] = bone. points (1);
} else {
bone.rotate (-rotationJ[side], -rotationK[side], graphics, backgroundColor);
endPoints[side] = bone. points (0);
}
placeJ[side] += rotationJ[side] * Bone. height;
placeK[side] += rotationK[side] * Bone. height;
x2 = placeJ[side];
y2 = placeK[side];
if (rotationJ[side] == -1 && placeJ[side] < Bone. height * 3) {
rotationJ[side] = 0;
rotationK[side] = -1;
placeJ[side] -= Bone. width / 2;
placeK[side] += Bone. width / 2;
}
if (rotationK[side] == -1 && placeK[side] < Bone. height * 3) {
rotationJ[side] = +1;
rotationK[side] = 0;
placeJ[side] -= Bone. width / 2;
placeK[side] -= Bone. width / 2;
}
if (rotationJ[side] == +1 && placeJ[side] > getWidth () — Bone. height * 3) {
rotationJ[side] = 0;
rotationK[side] = +1;
placeJ[side] += Bone. width / 2;
placeK[side] -= Bone. width / 2;
}
if (rotationK[side] == +1 && placeK[side] > getHeight () / 2 * (side + 1) — Bone. height * 2) {
rotationJ[side] = -1;
rotationK[side] = 0;
placeJ[side] += Bone. width / 2;
placeK[side] += Bone. width / 2;
}
bone.moveSliding (x2, y2, 500, graphics, backgroundColor);
for (Bone aBonesOnTheDesk: bonesOnTheDesk) {
aBonesOnTheDesk.show (graphics);
}
for (int p = 0; p < PLAYERS_COUNT; p++) {
for (int i = 0; i < playersBones[p]. size (); i++) {
playersBones[p]. get (i).show (graphics);
}
}
passesCount = 0;
if (playersBones[currentPlayerIdx]. size () == 0) {
stop = true;
}
if (passesCount == PLAYERS_COUNT) {
JOptionPane.showMessageDialog (this, «Π ΡΠ±Π°! ΠΠΎΠ±Π΅Π΄ΠΈΠ» ΠΈΠ³ΡΠΎΠΊ :» + getWinnerName ());
return;
} else if (stop) {
JOptionPane.showMessageDialog (this, «ΠΠΎΠ±Π΅Π΄ΠΈΠ» ΠΈΠ³ΡΠΎΠΊ: «+ («Π§Π΅Π»ΠΎΠ²Π΅ΠΊ β» + (currentPlayerIdx + 1)));
return;
}
currentPlayerIdx = (currentPlayerIdx + 1) % PLAYERS_COUNT;
updateAppTitle ();
doMove ();
}
private void highlightBones (Bone bone, boolean isHighlight) {
Bone begin = bonesOnTheDesk. get (0);
Bone end = bonesOnTheDesk. get (bonesOnTheDesk.size () — 1);
if (isHighlight) {
bone.setColorMarked ().show (graphics);
begin.setColorMarked ().show (graphics);
end.setColorMarked ().show (graphics);
} else {
bone.setColorUsual ().show (graphics);
begin.setColorUsual ().show (graphics);
end.setColorUsual ().show (graphics);
}
}
private boolean hasMoves () {
for (int i = 0; i < playersBones[currentPlayerIdx]. size (); i++) {
Bone bone = playersBones[currentPlayerIdx]. get (i);
for (int side = 0; side <= 1; side++) {
if (bone.points (0) == endPoints[side] || bone. points (1) == endPoints[side]) {
return true;
}
}
}
return false;
}
private String getWinnerName () {
int winnerIdx = 0;
int min = 239 239; // ΡΡΠΎ ΡΠΈΡΠ»ΠΎ ΡΠ²Π½ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠΌΠΌΡ Π²ΡΠ΅Ρ ΡΠΈΡΡ Π½Π° ΠΊΠΎΡΡΡΡΠΊΠ°Ρ
for (int p = 0; p < PLAYERS_COUNT; p++) {
int curMin = 0;
for (Bone bone: playersBones[p]) {
curMin += bone. points (0) + bone. points (1);
}
if (curMin < min) {
min = curMin;
winnerIdx = p;
}
}
return «Π§Π΅Π»ΠΎΠ²Π΅ΠΊ β» + (winnerIdx + 1);
}
private void stopButtonListener (ActionEvent evt) {
// do nothing
}
public static void main (String args[]) {
EventQueue.invokeLater (new Runnable () {
public void run () {
MainFrame frame = new MainFrame ();
frame.setSize (800, 600);
frame.setLocation (100, 50);//?!
frame.setVisible (true);
}
});
}
}
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. Π’Π΅ΡΡΠΎΠ²ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ «ΠΠ°ΡΠ°ΡΡ»:
ΠΠ°Π»Π΅Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΈΠ³ΡΠ°. Π ΠΈΠ³ΡΠ΅ ΡΡΠ°ΡΡΠ²ΡΡΡ 4 ΠΈΠ³ΡΠΎΠΊΠ°, ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΏΡΠΈ ΡΡΠΎΠΌ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΎΠΊΠ½Π° ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎΡ ΠΈΠ· Π½ΠΈΡ , ΠΊΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Ρ ΠΎΠ΄. ΠΠΎΡΡΠΈ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ Π²ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ Π² ΡΠ΅ΠΏΡ:
ΠΠ³ΡΠ° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΈΠ³ΡΠΎΠΊΠΎΠ² Π½Π΅ ΠΎΡΡΠ°Π΅ΡΡΡ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΡΡΠΈ, ΠΈΠ»ΠΈ Π½ΠΈ Ρ ΠΊΠΎΠ³ΠΎ ΠΈΠ· ΠΈΠ³ΡΠΎΠΊΠΎΠ² Π½Π΅Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅ΠΉ:
Π ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π±ΡΠ»ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΊΠΎΠ², ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΏΠΎΠ±Π΅Π΄ΠΈΡΠ΅Π»Π΅ΠΌ. Π‘ΠΈΡΡΠ°ΡΠΈΡ «ΡΡΠ±Π°» ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π°.