ΠΠ΅ΡΠΎΠ΄Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ
Π ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΡΡΠ²ΡΡΠ²ΡΡΡ 2 ΠΎΠ±ΡΠ΅ΠΊΡΠ°: ΠΈΡΡΠΎΡΠ½ΠΈΠΊ (source) ΠΈ Π±Π»ΠΎΠΊ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΡ (listenerΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΡΠΎΠ±ΡΡΠΈΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°). ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ MouseListener ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡΠΈΡ ΡΠΎΠ±ΡΡΠΈΡ ΡΠ΅Π»ΡΠΊΠ°, Π²Ρ ΠΎΠ΄Π° Π² Π³ΡΠ°Π½ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· Π³ΡΠ°Π½ΠΈΡ, Π½Π°ΠΆΠ°ΡΠΈΡ/ ΠΎΡΠΏΡΡΠΊΠ°Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΌΡΡΠΈ. ΠΠΎΡΠ»Π΅ Π²ΡΠ΅Ρ Π²Π½Π΅ΡΠ΅Π½Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠ΅ΡΠΎΠ΄Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΡ Π·Π°Π΄Π°Π½ΠΈΡ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π»ΠΎΠΏΠ°ΡΠΊΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΡΡΠΈ.
MovableSprite (ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΡΠΉ ΡΠΏΡΠ°ΠΉΡ) — ΡΡΠΎ ΡΠΏΡΠ°ΠΉΡ, ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΉ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ²ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΡΠΌΠΈ ΡΠΏΡΠ°ΠΉΡΠ°ΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΠΉΠ±Π° (Puck) ΠΈ Π»ΠΎΠΏΠ°ΡΠΊΠ° (Puddle). ΠΠΎ ΡΡΡΠΈ, Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ Π»ΠΎΠΏΠ°ΡΠΊΠΈ Puddle.
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΡΠΈΡ. 1, Π½Π° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ «ΠΠ²ΠΈΠ³Π°ΡΡ Π»ΠΎΠΏΠ°ΡΠΊΡ» Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°ΡΡΠΈΡΡΠ΅ΡΡΡ Π΄Π²ΡΠΌΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌΠΈ: «ΠΠ²ΠΈΠ³Π°ΡΡ Π»ΠΎΠΏΠ°ΡΠΊΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠΎΠΉ» ΠΈ «ΠΠ²ΠΈΠ³Π°ΡΡ Π»ΠΎΠΏΠ°ΡΠΊΡ ΠΌΡΡΡΡ».
Π ΠΈΡ. 1. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° JBriks
ΠΠΎΡΠ»Π΅ Π²ΡΠ΅Ρ Π²Π½Π΅ΡΠ΅Π½Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π° Enterprise Architect Π½Π° Π±Π°Π·Π΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ java ΡΠ°ΠΉΠ»ΠΎΠ², Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π²ΠΎΡ ΡΠ°ΠΊ:
Π ΠΈΡ. 2. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡΠ° JBriks
Π ΠΈΡ. 3. ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΊΠ»Π°ΡΡΠ° Puddle
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΡΠ΄Π΅Π»Π°Π½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠ»Π°ΡΡΠ΅ Pudle. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΠ΄Π΅Π»Π°Π½Ρ ΡΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ ΠΌΡΡΠΈ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° MouseListener.
Π‘ΠΎΠ±ΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° (Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π²ΡΠ±ΠΎΡ ΠΏΡΠ½ΠΊΡΠ° ΠΌΠ΅Π½Ρ, ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅, ΡΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΠΊΠΎΡΠΊΠ°, Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΈ Ρ. Π΄.). ΠΡΡΠΎΡΠ½ΠΈΠΊ ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ, Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΠΈΠΉ ΡΠΎΠ±ΡΡΠΈΡ.
Π ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΡΡΠ²ΡΡΠ²ΡΡΡ 2 ΠΎΠ±ΡΠ΅ΠΊΡΠ°: ΠΈΡΡΠΎΡΠ½ΠΈΠΊ (source) ΠΈ Π±Π»ΠΎΠΊ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΡ (listenerΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΡΠΎΠ±ΡΡΠΈΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°)
ΠΡΡΠΎΡΠ½ΠΈΠΊ ΠΎΠ±ΡΠ΅ΠΊΡ, Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΠΈΠΉ ΡΠΎΠ±ΡΡΠΈΠ΅.
ΠΠ»ΠΎΠΊ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΡ, Π½ΠΎ ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ½ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°ΠΌΠΈ, ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² (ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π±Π»ΠΎΠΊΠ° ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΡ) Π΄Π»Ρ ΠΏΡΠΈΠ΅ΠΌΠ° ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠΈΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ.
ΠΠ΅ΡΠΎΠ΄Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅ java.awt.event.
Π‘ΠΎΠ±ΡΡΠΈΠ΅ MouseEvent Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠ΅Π½ ΠΌΡΡΡΡ (dragged), ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ (moved), ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π» ΡΠ΅Π»ΡΠΎΠΊ (clicked), Π½Π°ΠΆΠ°ΡΠ° (pressed) ΠΈΠ»ΠΈ ΠΎΡΠΏΡΡΠ΅Π½Π° (released) ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ Π²Ρ ΠΎΠ΄ΠΈΡ ΠΈΠ»ΠΈ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π²/Π·Π° Π³ΡΠ°Π½ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ΅ΠΌΡ ΡΠΈΠΏΠΎΠ² Mouse-ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΡΡΡΡ ΡΠ΅ΠΌΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°ΠΌΠΈ:
MOUSE_CLICKED ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅Π»ΠΊΠ½ΡΠ» ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ;
MOUSE_DRAGGED ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΈΠ» ΠΌΡΡΡ;
MOUSE_ENTERED ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ Π²Π²Π΅Π΄Π΅Π½ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ;
MOUSE_EXITED ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ Π²ΡΠ²Π΅Π΄Π΅Π½ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°;
MOUSE_MOVED ΠΌΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠ½ΡΡΠ°;
MOUSE_PRESSED ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ Π½Π°ΠΆΠ°ΡΠ°;
MOUSE_RELEASED ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Π°.
ΠΠΎΠ΄Π΅Π»Ρ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π²Π΅ ΡΠ°ΡΡΠΈ: ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈ Π±Π»ΠΎΠΊΠΈ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΠ»ΠΎΠΊΠΈ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΏΡΡΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΡΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅ java.awt.event. ΠΠΎΠ³Π΄Π° ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π±Π»ΠΎΠΊΠΎΠΌ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΡ, ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π΅ΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ±ΡΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ MouseListener ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡΠΈΡ ΡΠΎΠ±ΡΡΠΈΡ ΡΠ΅Π»ΡΠΊΠ°, Π²Ρ ΠΎΠ΄Π° Π² Π³ΡΠ°Π½ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· Π³ΡΠ°Π½ΠΈΡ, Π½Π°ΠΆΠ°ΡΠΈΡ/ ΠΎΡΠΏΡΡΠΊΠ°Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΌΡΡΠΈ.
Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ΠΌ ΠΌΡ ΡΠ΅Π°Π»ΡΠ½ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π°:
1) ΠΌΠ΅ΡΠΎΠ΄ mouseClicked, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅ ΠΌΡΡΡΡ;
2) ΠΌΠ΅ΡΠΎΠ΄ mouseMoved, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΌΡΡΠΈ.
Π’Π°ΠΊΠΆΠ΅ Π²Π½ΡΡΡΠΈ ΠΊΠ»Π°ΡΡΠ° Puddle Π±ΡΠ»Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ isMovingByMouse ΡΠΈΠΏΠ° bool, Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ Π΄Π²ΠΈΠ³Π°ΡΡ Π»ΠΎΠΏΠ°ΡΠΊΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΡΡΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ.
Π ΠΈΡΠΎΠ³Π΅ Π±ΡΠ»ΠΈ ΡΠ΄Π΅Π»Π°Π½Ρ Π²ΠΎΡ ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅:
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
class Puddle extends MovableSprite implements KeyListener, MouseListener {
static final int LEFT = 37;
static final int RIGHT = 39;
static final int alpha = 10;
boolean isMovingByMouse = false;//ΡΡΠ°ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π»ΠΎΠΏΠ°ΡΠΊΠΎΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΡΡΠΈ
public Puddle (PlayField p, Image pic) {
super (
p,
pic,
new Rectangle (
p.getWidth () / 2,
p.getHeight () — 20,
pic.getWidth (p),
pic.getHeight (p)),
0,
10);
_pf.addKeyListener (this);
_pf.addMouseListener (this);
}
public void move () {
if (_isMoving) {
Rectangle b = _pf.getBoundary ();
_pos.x += _v.getSpeedX ();
if (_pos.x < b. x)
_pos.x = b. x;
else if (_pos.x + _pos.width > b. x + b. width)
_pos.x = b. x + b. width — _pos.width;
}
}
public void hitBy (Puck p) {
if (p.getDirection () == 90) {
p.setDirection (270 + alpha);
} else {
int px = p. getBounds ().x + p. getBounds ().width/2;
int l = (int) (_pos.x +_pos.width*(1.0/3));
int r = (int) (_pos.x +_pos.width*(2.0/3));
if (px < l || px > r) {
p.getVelocity ().reverse ();
} else {
p.getVelocity ().reverseY ();
}
}
}
/* ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ */
public void keyPressed (KeyEvent e) {
if (e.getKeyCode () == LEFT) {
startMoving ();
_v.setDirection (180);
} else if (e.getKeyCode () == RIGHT) {
startMoving ();
_v.setDirection (0);
}
}
/* ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΎΡΠΏΡΡΠΊΠ°Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ */
public void keyReleased (KeyEvent e) {
stopMoving ();
}
public void keyTyped (KeyEvent e) {
;
}
/* ΠΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΌΡΡΠΈ.
ΠΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΌΡΡΠΈ, Π΄Π²ΠΈΠ³Π°Π΅ΠΌ Π»ΠΎΠΏΠ°ΡΠΊΡ, Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΊΡΡΡΠΎΡΠΎΠΌ ΠΌΡΡΠΈ,
Π΅ΡΠ»ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ Π»ΠΎΠΏΠ°ΡΠΊΠΎΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΡΡΠΈ */
public void mouseMoved (MouseEvent me) //ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ mouseMoved
{
if (isMovingByMouse)
{
Rectangle b = _pf.getBoundary ();
//Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΠΌ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π»ΠΎΠΏΠ°ΡΠΊΠΎΠΉ ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡ ΠΊΡΠ°Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΡΡΡΠΎΡΠ° ΠΌΡΡΠΈ
//_pos.x = me. getX ();
//Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΠΌ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π»ΠΎΠΏΠ°ΡΠΊΠΎΠΉ ΠΏΠΎ ΡΠ΅Π½ΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΡΡΡΠΎΡΠ° ΠΌΡΡΠΈ
_pos.x = me. getX ()-_pos.width/2;
if (_pos.x < b. x)
_pos.x = b. x;
else if (_pos.x + _pos.width > b. x + b. width)
_pos.x = b. x + b. width — _pos.width;
}
}
public void mouseExited (MouseEvent me)
{}
public void mousePressed (MouseEvent me)
{}
public void mouseReleased (MouseEvent me)
{}
public void mouseEntered (MouseEvent me)
{}
/*ΠΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅ ΠΌΡΡΡΡ Π½Π°Π΄ ΠΊΡΡΡΠΎΡΠΎΠΌ ΠΌΡΡΠΈ,
Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΈΠ»ΠΈ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π»ΠΎΠΏΠ°ΡΠΊΠΈ ΠΌΡΡΡΡ*/
public void mouseClicked (MouseEvent me)
{
//ΠΡΠ»ΠΈ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΊΡΡΡΠΎΡΠΎΠΌ ΠΌΡΡΠΈ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°Π»Π°ΡΡ ΠΈΠ»ΠΈ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π»Π°ΡΡ
//ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΏΡΡΠΌΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅ ΠΌΡΡΠΊΠΎΠΉ Π½Π° Π»ΠΎΠΏΠ°ΡΠΊΠ΅
//if (_pos.contains (me.getX (), me. getY ()))
// ΠΏΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅ ΠΌΡΡΠΊΠΎΠΉ Π½Π°Π΄ Π»ΠΎΠΏΠ°ΡΠΊΠΎΠΉ
if (_pos.contains (me.getX (),_pos.getY ()))
isMovingByMouse=!isMovingByMouse;//ΡΠΌΠ΅Π½Π° ΡΡΠ°ΡΡΡΠ°
if (isMovingByMouse)
System.out.println («Moving by mouse is possible!»);
else
System.out.println («Moving by mouse is impossible!»);
}
}