ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² ΡƒΡ‡Ρ‘Π±Π΅, ΠΎΡ‡Π΅Π½ΡŒ быстро...
Π Π°Π±ΠΎΡ‚Π°Π΅ΠΌ вмСстС Π΄ΠΎ ΠΏΠΎΠ±Π΅Π΄Ρ‹

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡ΠΊΠ°ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ устройства ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ «Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ», ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ способно ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ любоС Π°Ρ„Ρ„ΠΈΠ½Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ плоскости, Π² Ρ‡Π°ΡΡ‚ности, ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π½Π° Π»ΡŽΠ±ΠΎΠΉ ΡƒΠ³ΠΎΠ» ΠΈ/ΠΈΠ»ΠΈ сТатиС/растяТСниС. Оно опрСдСляСтся ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса AffineTransform. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ setTransform (). Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

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

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

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

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Москва 2004 Π³.

  • ЦСль Ρ€Π°Π±ΠΎΡ‚Ρ‹ 3
  • Π—Π°Π΄Π°Π½ΠΈΠ΅ для домашнСй ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ 3
  • Π—Π°Π΄Π°Π½ΠΈΠ΅ ΠΊ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ 3
  • Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° 4
  • ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы. 4
  • Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

    6

  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. ГрафичСскиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹. 7
    • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Graphics 7
      • ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ 21
      • РисованиС Ρ„ΠΈΠ³ΡƒΡ€ срСдствами Java2D 25
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΠΈ с ΠΊΡƒΡ€ΡΠΎΡ€Π°ΠΌΠΈ. 31
    • Класс Cursor 31
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 3. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° дСйствий ΠΌΡ‹ΡˆΠΈ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. 35
    • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° дСйствий ΠΌΡ‹ΡˆΠΈ 35
      • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° дСйствий ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ 36
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 4. Нити процСссов. 38
    • Класс Thread ΠΈ ΠΈΠ½Ρ‚СрфСйс Runnable. 39
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 5. БогласованиС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². 43
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 6. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ «Π‘Сгущая строка». 44

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

1. ΠžΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ java. applet ΠΈ ΠΊΠ»Π°ΡΡ java.applet.Applet.

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

3. ΠŸΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ями ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² java.awt.geom, java. awt ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² java.awt.Graphics ΠΈ java.awt.Graphics2D.

4. Π˜Π·ΡƒΡ‡ΠΈΡ‚ΡŒ основныС графичСскиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹.

5. ΠžΡΠ²ΠΎΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

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

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

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

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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π°ΠΏΠ»Π΅Ρ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠ³Ρ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты:

o ΠΎΡΠ½ΠΎΠ²Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса — графичСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, созданныС Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² java. awt, java.awt.geom ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² java.awt.Graphics ΠΈ java.awt.Graphics2D.

o Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΄Π²ΡƒΡ… двиТущихся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², созданных Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Ρ‚Π΅Ρ… ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ управляСтся своим ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ задания Ρ€Π°Π·Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… Thread. sleep ()).

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ/ΠΈΠ»ΠΈ ΠΌΡ‹ΡˆΡŒΡŽ. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ΡˆΡŒ, Ρ‚ΠΎ Π½Π΅Π»ΡŒΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ курсор, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, (вмСсто Π½Π΅Π³ΠΎ Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ, подходящий ΠΏΠΎ ΡΠΌΡ‹ΡΠ»Ρƒ, ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой).

o Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ (Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) — Π² ΠΈΠ³Ρ€Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅ΡΡ‚ΠΈΡΡŒ подсчСт ΠΎΡ‡ΠΊΠΎΠ².

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΈΠ³Ρ€Ρ‹ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, «Ρ‚ΠΈΡ€» ΠΈΠ»ΠΈ «Ρ„ΡƒΡ‚Π±ΠΎΠ»».

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

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

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

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

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

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

1. Π’ ΡΠ»ΡƒΡ‡Π°Π΅, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° — Π°ΠΏΠ»Π΅Ρ‚ состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… классов ΠΈ ΠΏΠΎΡΠ»Π΅ компиляции сгСнСрировано нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ² *.class, ΠΊΠ°ΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° html — Ρ„Π°ΠΉΠ»Π° это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ?

2. Бколько классов Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ java. applet?

3. Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΎΠΊΠ½Π°?

4. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π»ΠΈΠ½ΡŒΡΠΆ?

5. Как Π·Π°Π΄Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ курсора?

6. НазовитС имя Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² Java — ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ (Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ — это ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСт ΠΌΠ΅Ρ‚ΠΎΠ΄ main ()).

7. По ΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ, Ρ‡ΡŒΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π΅ Π·Π°Π΄Π°ΡŽΡ‚ся программистом явно?

8. Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π°Ρ„Ρ„ΠΈΠ½Π½Ρ‹Ρ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π΅ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅.

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

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. ГрафичСскиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹

ΠŸΡ€ΠΈ создании ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° автоматичСски формируСтся Π΅Π³ΠΎ графичСский контСкст. Π’ ΠΊΠΎΠ½Ρ‚СкстС размСщаСтся ΠΎΠ±Π»Π°ΡΡ‚ΡŒ рисования ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° тСкста ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ содСрТит Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ рисования ΠΈ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Color, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ для Π²Ρ‹Π²ΠΎΠ΄Π° тСкста — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Font.

Π’ ΠΊΠΎΠ½Ρ‚СкстС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (0, 0) располоТСно Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ области рисования, ось ΠžΡ… Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° Π²ΠΏΡ€Π°Π²ΠΎ, ось ΠžΡƒ — Π²Π½ΠΈΠ·. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΈΠ·ΠΌΠ΅Ρ€ΡΡŽΡ‚ΡΡ Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΡ….

УправляСт контСкстом класс Graphics ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ класс Graphics2D, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² Java 2. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ графичСский контСкст сильно зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ графичСской ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, эти классы сдСланы абстрактными. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ нСльзя нСпосрСдствСнно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляры класса Graphics ΠΈΠ»ΠΈ Graphics2D.

Однако каТдая Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ этих классов, создаСт ΠΈΡ… ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ€Ρ‹ для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚авляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Graphics ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ getGraphics () класса Component ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² paint () ΠΈ update ().

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ сначала, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠΉ ΠΈ Ρ‚Скстом прСдоставляСт класс Graphics.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Graphics

ΠŸΡ€ΠΈ создании контСкста Π² Π½Π΅ΠΌ задаСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ†Π²Π΅Ρ‚ для рисования, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ, ΠΈ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° области рисования — Π±Π΅Π»Ρ‹ΠΉ ΠΈΠ»ΠΈ сСрый. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ†Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ setColor (Color newColor), Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ newColor ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Color.

Π£Π·Π½Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ†Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ getColor (), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Color.

Как Π·Π°Π΄Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚

Π¦Π²Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΈ Π²ΡΠ΅ Π² Java, — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ класса, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, класса Color. ΠžΡΠ½ΠΎΠ²Ρƒ класса ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ сСмь конструкторов Ρ†Π²Π΅Ρ‚Π°. Π‘Π°ΠΌΡ‹ΠΉ простой конструктор:

Color (int red, int green, int blue)

создаСт Ρ†Π²Π΅Ρ‚, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΊΠ°ΠΊ смСсь красной red, Π·Π΅Π»Π΅Π½ΠΎΠΉ green ΠΈ ΡΠΈΠ½Π΅ΠΉ blue ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ…. Π­Ρ‚Π° цвСтовая модСль называСтся RGB. КаТдая ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ мСняСтся ΠΎΡ‚ 0 (отсутствиС ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ) Π΄ΠΎ 255 (полная ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ этой ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ). НапримСр:

Color pureRed = new Color (255, 0, 0);

Color pureGreen = new Color (0, 255, 0);

ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ чистый ярко-красный pureRed ΠΈ Ρ‡ΠΈΡΡ‚Ρ‹ΠΉ ярко-Π·Π΅Π»Π΅Π½Ρ‹ΠΉ pureGreen Ρ†Π²Π΅Ρ‚Π°.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ конструкторС ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π³Π»Π°Π΄ΠΊΠΎ вСщСствСнными числами ΠΎΡ‚ 0.0 (отсутствиС ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ) Π΄ΠΎ 1.0 (полная ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ):

Color (float red, float green, float blue)

НапримСр, Color someColor = new Color (O.OSf, 0.4f, 0.95f);

Π’Ρ€Π΅Ρ‚ΠΈΠΉ конструктор

Color (int rgb)

Π·Π°Π΄Π°Π΅Ρ‚ всС Ρ‚Ρ€ΠΈ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ†Π΅Π»ΠΎΠΌ числС. Π’ Π±ΠΈΡ‚Π°Ρ… 16—23 записываСтся красная ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ, Π² Π±ΠΈΡ‚Π°Ρ… 8—15 — зСлСная, Π° Π² Π±ΠΈΡ‚Π°Ρ… 0—7 — синяя ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ Ρ†Π²Π΅Ρ‚Π°. НапримСр, Color с = new Color (OXFF8F48FF);

Π—Π΄Π΅ΡΡŒ красная ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ Π·Π°Π΄Π°Π½Π° с ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ 0x8 °F, зСлСная — 0×48, синяя 0xFF.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€ΠΈ конструктора

Color (int red, int green, int blue, int alpha)

Color (float red, float green, float blue, float alpha)

Color (int rgb, boolean hasAlpha)

вводят Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΡƒΡŽ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ Ρ†Π²Π΅Ρ‚Π°, Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ «Π°Π»ΡŒΡ„Ρƒ», ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚Π°. Π­Ρ‚Π° ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ проявляСт сСбя ΠΏΡ€ΠΈ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Если Π°Π»ΡŒΡ„Π° Ρ€Π°Π²Π½Π° 255 ΠΈΠ»ΠΈ 1.0, Ρ‚ΠΎ Ρ†Π²Π΅Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π΅Π½, ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ†Π²Π΅Ρ‚ Π½Π΅ ΠΏΡ€ΠΎΡΠ²Π΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ сквозь Π½Π΅Π³ΠΎ. Если Π°Π»ΡŒΡ„Π° Ρ€Π°Π²Π½Π° 0 ΠΈΠ»ΠΈ 0.0, Ρ‚ΠΎ Ρ†Π²Π΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π΅Π½, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля Π²ΠΈΠ΄Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ†Π²Π΅Ρ‚.

ПослСдний ΠΈΠ· ΡΡ‚ΠΈΡ… конструкторов ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ Π°Π»ΡŒΡ„Π°, Π½Π°Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽΡΡ Π² Π±ΠΈΡ‚Π°Ρ… 24—31, Ссли ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ hasAlpha Ρ€Π°Π²Π΅Π½ true. Если ΠΆΠ΅ hasAlpha Ρ€Π°Π²Π½ΠΎ false, Ρ‚ΠΎ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ Π°Π»ΡŒΡ„Π° считаСтся Ρ€Π°Π²Π½ΠΎΠΉ 255, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ записано Π² ΡΡ‚Π°Ρ€ΡˆΠΈΡ… Π±ΠΈΡ‚Π°Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° rgb.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚Ρ€ΠΈ конструктора ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ с Π°Π»ΡŒΡ„ΠΎΠΉ, Ρ€Π°Π²Π½ΠΎΠΉ 255 ΠΈΠ»ΠΈ 1.0.

БСдьмой конструктор

Color (ColorSpace cspace, float[] components, float alpha)

позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ (color model) RGB, Π½ΠΎ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… модСлях: CMYK, HSB, CIEXYZ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса ColorSpace.

Для создания Ρ†Π²Π΅Ρ‚Π° Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ HSB ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ статичСским ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ

getHSBColor (float hue, float saturation, float brightness).

Если Π½Π΅Ρ‚ нСобходимости Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ просто Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ‚Ρ€ΠΈΠ½Π°Π΄Ρ†Π°Ρ‚ΠΈ статичСских констант Ρ‚ΠΈΠΏΠ° Color, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ Color. Π’ΠΎΠΏΡ€Π΅ΠΊΠΈ соглашСнию «Code Conventions» ΠΎΠ½ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ строчными Π±ΡƒΠΊΠ²Π°ΠΌΠΈ: black, blue, cyan, darkGray, gray, green, lightGray, magenta, orange, pink, red, white, yellow.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Color ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚Π°: getRed (), getGreen (), getBlue (), getAlpha (), getRGB (), getColorSpace (), getComponents ().

Π”Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ яркий brighter () ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‚Π΅ΠΌΠ½Ρ‹ΠΉ darker () Ρ†Π²Π΅Ρ‚Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ. Они ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, Ссли Π½Π°Π΄ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠ»ΠΈ, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±Π»Π΅Π΄Π½Π΅Π΅ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Π”Π²Π° статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ†Π²Π΅Ρ‚, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠ· Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ RGB Π² HSB ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ:

float[] RGBtoHSB (int red, int green, int blue, float[] hsb)

int HSBtoRGB (int hue, int saturation, int brightness)

Π‘ΠΎΠ·Π΄Π°Π² Ρ†Π²Π΅Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌ Π² Π³Ρ€Π°Ρ„ичСском контСкстС.

Как Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆ

Основной ΠΌΠ΅Ρ‚ΠΎΠ΄ рисования

drawLine (int x1, int y1, int Ρ…2, int y2)

Π²Ρ‹Ρ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΎΡ‚Ρ€Π΅Π·ΠΎΠΊ прямой ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (x1, y1) ΠΈ (Ρ…2, Ρƒ2).

Одного этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹, Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ ΠΏΠΎ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ, вычСрчивая ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (Ρ…, Ρƒ) ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ drawLine (x, Ρƒ, Ρ…, Ρƒ) ΠΈ ΠΌΠ΅Π½ΡΡ Ρ†Π²Π΅Ρ‚Π° ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ΅. Но Π½ΠΈΠΊΡ‚ΠΎ, разумССтся, Π½Π΅ ΡΡ‚Π°Π½Π΅Ρ‚ этого Π΄Π΅Π»Π°Ρ‚ΡŒ.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ графичСскиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹:

Β· drawRect (int x, int Ρƒ, int width, int height) — Ρ‡Π΅Ρ€Ρ‚ΠΈΡ‚ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ со ΡΡ‚ΠΎΡ€ΠΎΠ½Π°ΠΌΠΈ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ краям экрана, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° (Ρ…, Ρƒ), ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ width пиксСлов ΠΈ Π²Ρ‹ΡΠΎΡ‚ΠΎΠΉ height пиксСлов;

Β· draw3DRect (int x, int Ρƒ, int width, int height, boolean raised) — Ρ‡Π΅Ρ€Ρ‚ΠΈΡ‚ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΈΠ· ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΠΈ рисования, Ссли Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ raised Ρ€Π°Π²Π΅Π½ true, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Π²Π΄Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ, Ссли Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ raised Ρ€Π°Π²Π΅Π½ false;

Β· drawOval (int x, int Ρƒ, int width, int height) — Ρ‡Π΅Ρ€Ρ‚ΠΈΡ‚ ΠΎΠ²Π°Π», вписанный Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Если width == height, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ся ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ;

Β· drawArc (int x, int Ρƒ, int width, int height, int startAngle, int arc) — Ρ‡Π΅Ρ€Ρ‚ΠΈΡ‚ Π΄ΡƒΠ³Ρƒ ΠΎΠ²Π°Π»Π°, вписанного Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ. Π”ΡƒΠ³Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ arc градусов ΠΈ ΠΎΡ‚считываСтся ΠΎΡ‚ ΡƒΠ³Π»Π° startAngle. Π£Π³ΠΎΠ» отсчитываСтся Π² Π³Ρ€Π°Π΄ΡƒΡΠ°Ρ… ΠΎΡ‚ ΠΎΡΠΈ ΠžΡ…. ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» отсчитываСтся ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки, ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ — ΠΏΠΎ Ρ‡Π°ΡΠΎΠ²ΠΎΠΉ стрСлкС;

Β· drawRoundRect (int x, int Ρƒ, int width, int height, int arcWidth, int arcHeight) — Ρ‡Π΅Ρ€Ρ‚ΠΈΡ‚ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ с Π·Π°ΠΊΡ€ΡƒΠ³Π»Π΅Π½Π½Ρ‹ΠΌΠΈ краями. ЗакруглСния Π²Ρ‹Ρ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΈΠ½ΠΊΠ°ΠΌΠΈ ΠΎΠ²Π°Π»ΠΎΠ², вписанных Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ arcwidth ΠΈ Π²Ρ‹ΡΠΎΡ‚ΠΎΠΉ arcHeight, построСнныС Π² ΡƒΠ³Π»Π°Ρ… основного ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°;

Β· drawPolyline (int[] xPoints, int[] yPoints, int nPoints) — Ρ‡Π΅Ρ€Ρ‚ΠΈΡ‚ Π»ΠΎΠΌΠ°Π½ΡƒΡŽ с Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… (xPoints[i], ypoints[i]) ΠΈ Ρ‡ΠΈΡΠ»ΠΎΠΌ Π²Π΅Ρ€ΡˆΠΈΠ½ nPoints;

Β· drawPolygon (int[] xPoints, int[] yPoints, int nPoints) — Ρ‡Π΅Ρ€Ρ‚ΠΈΡ‚ Π»ΠΎΠΌΠ°Π½ΡƒΡŽ, проводя Π·Π°ΠΌΡ‹ΠΊΠ°ΡŽΡ‰ΠΈΠΉ ΠΎΡ‚Ρ€Π΅Π·ΠΎΠΊ прямой ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ;

Β· drawFoiygon (Polygon p) — Ρ‡Π΅Ρ€Ρ‚ΠΈΡ‚ Π·Π°ΠΌΠΊΠ½ΡƒΡ‚ΡƒΡŽ Π»ΠΎΠΌΠ°Π½ΡƒΡŽ, Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°Π΄Π°Π½Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ€ ΠΊΠ»Π°ΡΡΠ° Polygon.

Класс Polygon

Π­Ρ‚ΠΎΡ‚ класс ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ, Π² Ρ‡Π°ΡΡ‚ности, с Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌΠΈ.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого класса ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ двумя конструкторами:

Β· Polygon () — создаСт пустой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚;

Β· Polygon (int[] xPoints, int[] yPoints, int nPoints) — Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° (xPoints[i], yPoints[i]) ΠΈ ΠΈΡ… Ρ‡ΠΈΡΠ»ΠΎ nPoints

ПослС создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ

addPoint (int x, int Ρƒ)

ЛогичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ contains () ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π½Π΅ Π»Π΅ΠΆΠΈΡ‚ Π»ΠΈ Π² ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ΅ заданная Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‚ΠΎΡ‡ΠΊΠ°, ΠΎΡ‚Ρ€Π΅Π·ΠΎΠΊ прямой ΠΈΠ»ΠΈ Ρ†Π΅Π»Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ со ΡΡ‚ΠΎΡ€ΠΎΠ½Π°ΠΌΠΈ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ сторонам экрана.

ЛогичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ intersects () ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°Π΅Ρ‚ся Π»ΠΈ с Π΄Π°Π½Π½Ρ‹ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ ΠΎΡ‚Ρ€Π΅Π·ΠΎΠΊ прямой, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΈΠ»ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ со ΡΡ‚ΠΎΡ€ΠΎΠ½Π°ΠΌΠΈ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ сторонам экрана.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ getBounds () ΠΈ getBounds2D () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ содСрТащий Π² ΡΠ΅Π±Π΅ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ.

ВСрнСмся ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ класса Graphics. НСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²Ρ‹Ρ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, Π·Π°Π»ΠΈΡ‚Ρ‹Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ: fillRect (), fill3DRect (), fillArc (), fillOval (), fillPolygon (), fillRoundRect (). Π£ Π½ΠΈΡ… Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΊΠ°ΠΊ ΠΈ Ρƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π²Ρ‹Ρ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Π½Π΅Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹.

НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° области рисования, Ρ‚ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ†Π²Π΅Ρ‚ ΠΈ Π½Π°Ρ‡Π΅Ρ€Ρ‚ΠΈΡ‚Π΅ ΠΈΠΌ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Π²ΠΎ Π²ΡΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ:

public void paint (Graphics g)(

Color initColor = g. getColor (); // БохраняСм исходный Ρ†Π²Π΅Ρ‚

g.setColor (new Color (0, 0, 255)); // УстанавливаСм Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π°

// Π—Π°Π»ΠΈΠ²Π°Π΅ΠΌ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ рисования

g.fillRect (0, 0, getSize ().width-1, getSize ().height-1);

g.setColor (initColor); // ВосстанавливаСм исходный Ρ†Π²Π΅Ρ‚

// Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠ΅ дСйствия

}

Как Π²ΠΈΠ΄Π½ΠΎ, Π² ΠΊΠ»Π°ΡΡΠ΅ Graphics собраны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самыС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ срСдства рисования. НСт Π΄Π°ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π·Π°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° (хотя ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ setBackground () класса Π‘omponent). БрСдства рисования, Π²Ρ‹Π²ΠΎΠ΄Π° тСкста Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ рисования ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ΅ Graphics2D, входящСм Π² ΡΠΈΡΡ‚Π΅ΠΌΡƒ Java 2D. НапримСр, Π² Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ задания Ρ†Π²Π΅Ρ‚Π° Ρ„ΠΎΠ½Π° setBackground (Color с).

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡƒ Graphics2D, рассмотрим срСдства класса Graphics для Π²Ρ‹Π²ΠΎΠ΄Π° тСкста.

Как вывСсти тСкст

Для Π²Ρ‹Π²ΠΎΠ΄Π° тСкста Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ рисования Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ, начиная с Ρ‚ΠΎΡ‡ΠΊΠΈ (Ρ…, Ρƒ), Π², классС Graphics Π΅ΡΡ‚ΡŒ нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

Β· drawString (String s, int x, int y) — Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ строку s;

Β· drawBytes (byte[] b, int offset, int length, int x, int Ρƒ) — Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ length элСмСнтов массива Π±Π°ΠΉΡ‚ΠΎΠ² b, начиная с ΠΈΠ½Π΄Π΅ΠΊΡΠ° offset;

Β· drawChars (char[] ch, int offset, int length, int x, int Ρƒ) — Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ length элСмСнтов массива символов ch, начиная с ΠΈΠ½Π΄Π΅ΠΊΡΠ° offset.

Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ тСкст, занСсСнный Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ интСрфСйс AttributedCharacterIterator. Π­Ρ‚ΠΎ позволяСт Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ свой ΡˆΡ€ΠΈΡ„Ρ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ симвбла:

Β· drawString (AttributedCharacterIterator iter, int x, int y).Π’ΠΎΡ‡ΠΊΠ° (Ρ…, Ρƒ) — это лСвая ниТняя Ρ‚ΠΎΡ‡ΠΊΠ° ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹ тСкста Π½Π° Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ (baseline) Π²Ρ‹Π²ΠΎΠ΄Π° ΡˆΡ€ΠΈΡ„Ρ‚Π°.

Как ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡˆΡ€ΠΈΡ„Ρ‚

ΠœΠ΅Ρ‚ΠΎΠ΄ setFont (Font newFont) класса Graphics устанавливаСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ для Π²Ρ‹Π²ΠΎΠ΄Π° тСкста.

ΠœΠ΅Ρ‚ΠΎΠ΄ getFont () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡˆΡ€ΠΈΡ„Ρ‚.

Как ΠΈ Π²ΡΠ΅ Π² ΡΠ·Ρ‹ΠΊΠ΅ Java, ΡˆΡ€ΠΈΡ„Ρ‚ — это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Font. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ возмоТности прСдоставляСт этот класс.

Как Π·Π°Π΄Π°Ρ‚ΡŒ ΡˆΡ€ΠΈΡ„Ρ‚

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Font хранят начСртания (glyphs) символов, ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰ΠΈΠ΅ ΡˆΡ€ΠΈΡ„Ρ‚. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ двумя конструкторами:

Β· Font (Map attributes) — Π·Π°Π΄Π°Π΅Ρ‚ ΡˆΡ€ΠΈΡ„Ρ‚ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ attributes Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ. ΠšΠ»ΡŽΡ‡ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ константами класса TextAttnbute ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° java.awt.font. Π­Ρ‚ΠΎΡ‚ конструктор Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π΅Π½ для Java 2D ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Π΄Π°Π»Π΅Π΅.

Β· Font (String name, int style, int size) — Π·Π°Π΄Π°Π΅Ρ‚ ΡˆΡ€ΠΈΡ„Ρ‚ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ name, со ΡΡ‚ΠΈΠ»Π΅ΠΌ style ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ size типографских ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎΡ‚ конструктор Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π΅Π½ для JDK 1.1, Π½ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ Π² Java 2D Π² ΡΠΈΠ»Ρƒ своСй простоты.

Випографский ΠΏΡƒΠ½ΠΊΡ‚ Π² Π ΠΎΡΡΠΈΠΈ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… СвропСйских странах Ρ€Π°Π²Π΅Π½ 0,376 ΠΌΠΌ, Π’ΠΎΡ‡Π½Π΅Π΅, 1/72 части французского дюйма. Π’ Π°Π½Π³Π»ΠΎ-амСриканской систСмС ΠΌΠ΅Ρ€ ΠΏΡƒΠ½ΠΊΡ‚ Ρ€Π°Π²Π΅Π½ 1/72 части английского дюйма, 0,351 ΠΌΠΌ. Π­Ρ‚ΠΎΡ‚-Ρ‚ΠΎ ΠΏΡƒΠ½ΠΊΡ‚ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ся Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅.

Имя ΡˆΡ€ΠΈΡ„Ρ‚Π° name ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ строкой с Ρ„изичСским ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, «Courier New», ΠΈΠ»ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· ΡΡ‚Ρ€ΠΎΠΊ «Dialog», «Dialoglnput» ,' «Monospaced», «Serif», «SansSerif», «Symbol». Π­Ρ‚ΠΎ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ логичСскиС ΠΈΠΌΠ΅Π½Π° ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² (logical font names). Если name == null, Ρ‚ΠΎ Π·Π°Π΄Π°Π΅Ρ‚ся ΡˆΡ€ΠΈΡ„Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π‘Ρ‚ΠΈΠ»ΡŒ ΡˆΡ€ΠΈΡ„Ρ‚Π° style — это ΠΎΠ΄Π½Π° ΠΈΠ· ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚ класса Font:

Β· BOLD — ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹ΠΉ;

Β· ITALIC — курсив;

Β· PLAIN — ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ.

ΠŸΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹ΠΉ курсив (bolditalic) ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ слоТСния, Font. BOLD | Font. ITALIC.

ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ тСкста логичСским ΠΈΠΌΠ΅Π½Π°ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² ΠΈ ΡΡ‚илям ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ физичСскиС ΠΈΠΌΠ΅Π½Π° ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² (font face name) ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½Π° сСмСйств ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² (font name). Π­Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ², ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π² Π³Ρ€Π°Ρ„ичСской подсистСмС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы.

НапримСр, логичСскому ΠΈΠΌΠ΅Π½ΠΈ «Serif» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сопоставлСно имя сСмСйства (family) ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² Times New Roman, Π° Π² ΡΠΎΡ‡Π΅Ρ‚Π°Π½ΠΈΠΈ со ΡΡ‚илями — ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ физичСскиС ΠΈΠΌΠ΅Π½Π° Times New Roman Bold, Times New Roman Italic. Π­Ρ‚ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΡΠΎΡΡ‚Π°Π²Π΅ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² графичСской систСмы Ρ‚ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выполняСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Бписок ΠΈΠΌΠ΅Π½ доступных ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ:

Font[] fnt = Toolkit.getGraphicsEnvironment.getAHFonts ();

for (int i = 0; i< fnt. length; i++)

System.out.println (fnt[i]. getFontName ());

Π’ ΡΠΎΡΡ‚Π°Π² SUN J2SDK Π²Ρ…ΠΎΠ΄ΠΈΡ‚ сСмСйство ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² Lucida. Установив SDK, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ эти ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹ Π΅ΡΡ‚ΡŒ Π² Π²Π°ΡˆΠ΅ΠΉ систСмС.

Π’Π°Π±Π»ΠΈΡ†Ρ‹ сопоставлСния логичСских ΠΈ Ρ„изичСских ΠΈΠΌΠ΅Π½ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² находятся Π² Ρ„Π°ΠΉΠ»Π°Ρ… с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ

Β· font. properties;

Β· font.properties.ar;

Β· font.properties.ja;

Β· font.properties.ru.

ΠΈ Ρ‚. Π΄. Π­Ρ‚ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ располоТСны Π² JDK Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ jdkl.3jrelib ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ Π”Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ lib ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° JDK Ρ‚ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выполняСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

НуТный Ρ„Π°ΠΉΠ» выбираСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной Java ΠΏΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°. Π­Ρ‚ΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ совпадаСт с ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ языка, установлСнного Π² Π»ΠΎΠΊΠ°Π»ΠΈ ΠΈΠ»ΠΈ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ½ΠΎΠΌ свойствС user.language. Если Ρƒ Π²Π°Ρ установлСна русская локаль с ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ языка «ru», Ρ‚ΠΎ Π΄Π»Ρ сопоставлСния Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ Ρ„Π°ΠΉΠ» font.properties.ru. Если Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ся Ρ„Π°ΠΉΠ» font. properties, Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ.

Π˜Ρ‚Π°ΠΊ, ΡΠΎΠ±ΠΈΡ€Π°ΡΡΡŒ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ строку str Π² Π³Ρ€Π°Ρ„ичСский контСкст ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ drawString (), ΠΌΡ‹ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡˆΡ€ΠΈΡ„Ρ‚ конструктором класса Font, указывая Π² Π½Π΅ΠΌ логичСскоС имя ΡˆΡ€ΠΈΡ„Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, «Serif». Π˜ΡΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ систСма Java отыскиваСт Π² Ρ„Π°ΠΉΠ»Π΅ font. properties, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ языку, сопоставлСнный этому логичСскому ΠΈΠΌΠ΅Π½ΠΈ физичСский ΡˆΡ€ΠΈΡ„Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Times New Roman. Если это Unicode-ΡˆΡ€ΠΈΡ„Ρ‚, Ρ‚ΠΎ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ начСртания символов строки str ΠΏΠΎ ΠΈΡ… ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Unicode ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Π³Ρ€Π°Ρ„ичСский контСкст.

ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ строки Π² ΠΎΠΊΠ½ΠΎ прилоТСния ΠΎΡ‡Π΅Π½ΡŒ часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнтов изобраТСния: Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, вывСсти Π½Π°Π΄ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌ графичСским ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Для этого Π½Π°Π΄ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΡƒ строки: Π΅Π΅ Π²Ρ‹ΡΠΎΡ‚Ρƒ ΠΈ ΡˆΠΈΡ€ΠΈΠ½Ρƒ. Для измСрСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… символов ΠΈ ΡΡ‚Ρ€ΠΎΠΊΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ класс FontMetrics.

Π’ Java 2D класс FontMetrics Π·Π°ΠΌΠ΅Π½Π΅Π½ классом TextLayout. Π•Π³ΠΎ ΠΌΡ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π² ΠΊΠΎΠ½Ρ†Π΅ этого прилоТСния, Π° ΡΠ΅ΠΉΡ‡Π°Ρ выясним, ΠΊΠ°ΠΊΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса FontMetrics.

Класс FontMetrics

Класс FontMetrics являСтся абстрактным, поэтому нСльзя Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΅Π³ΠΎ конструктором. Для получСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса FontMetrics, содСрТащСго Π½Π°Π±ΠΎΡ€ мСтричСских характСристик ΡˆΡ€ΠΈΡ„Ρ‚Π° f, Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ getFontMetrics (f) класса Graphics ΠΈΠ»ΠΈ класса Component.

Класс FontMetrics позволяСт ΡƒΠ·Π½Π°Ρ‚ΡŒ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ символа ch Π² ΠΏΠΈΠΊΡΠ΅Π»Π°Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ charWidth (ch), ΠΎΠ±Ρ‰ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ всСх символов массива ΠΈΠ»ΠΈ полмассива символов ΠΈΠ»ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ getChars () ΠΈ getBytes (), ΡˆΠΈΡ€ΠΈΠ½Ρƒ Ρ†Π΅Π»ΠΎΠΉ строки str Π² ΠΏΠΈΠΊΡΠ΅Π»Π°Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ stringWidth (str).

НСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π² ΠΏΠΈΠΊΡΠ΅Π»Π°Ρ… Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΡˆΡ€ΠΈΡ„Ρ‚Π°.

Π˜Π½Ρ‚Π΅Ρ€Π»ΠΈΠ½ΡŒΡΠΆ (leading) — расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΆΠ½Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΡΠ²ΠΈΡΠ°ΡŽΡ‰ΠΈΡ… элСмСнтов Ρ‚Π°ΠΊΠΈΡ… Π±ΡƒΠΊΠ², ΠΊΠ°ΠΊ Ρ€, Ρƒ ΠΈ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… элСмСнтов Ρ‚Π°ΠΊΠΈΡ… Π±ΡƒΠΊΠ², ΠΊΠ°ΠΊ Π±, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ getLeading ().

Π‘Ρ€Π΅Π΄Π½Π΅Π΅ расстояниС ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ ΡˆΡ€ΠΈΡ„Ρ‚Π° Π΄ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ прописных Π±ΡƒΠΊΠ² ΠΈ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… элСмСнтов Ρ‚ΠΎΠΉ ΠΆΠ΅ строки (ascent) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ getAscent (), Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ — ΠΌΠ΅Ρ‚ΠΎΠ΄ getMaxAscent ().

Π‘Ρ€Π΅Π΄Π½Π΅Π΅ расстояниС ΡΠ²ΠΈΡΠ°ΡŽΡ‰ΠΈΡ… элСмСнтов ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ строки (descent) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ getDescent (), Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ — ΠΌΠ΅Ρ‚ΠΎΠ΄ getMaxDescent ().

НаконСц, высоту ΡˆΡ€ΠΈΡ„Ρ‚Π° (height) — сумму ascent + descent + leading — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ getHeight (). Высота ΡˆΡ€ΠΈΡ„Ρ‚Π° Ρ€Π°Π²Π½Π° Ρ€Π°ΡΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ линиями сосСдних строк.

Π­Ρ‚ΠΈ элСмСнты ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π½Π° Ρ€ΠΈΡ. 1.

Рис. 1. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΡˆΡ€ΠΈΡ„Ρ‚Π°

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ характСристики ΡˆΡ€ΠΈΡ„Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ класса LineMetrics ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° java.awt.font. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ этого класса ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ нСсколькими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ getLineMetrics () класса FontMetrics.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1 ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ графичСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ², Π° Ρ€ΠΈΡ. 2 — Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ· ΡΡ‚ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. ИспользованиС графичСских ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²

import java.awt.*;

import j ava.awt.event.*;

class GraphTest extends Frame{

GraphTest (String s) {

super (s);

setBounds (0, 0, 500, 300);

setVisible (true);

}

public void paint (Graphics g){

Dimension d = getSize ();

int dx=d.width/20, dy=d.height/20;

g.drawRect (dx, dy+20, d. width-2*dx, d. height-2*dy-20);

g.drawRoundRect (2*dx, 2*dy+20, d. width-4*dx, d. height-4*dy-20, dx, dy);

g.fillArctd.width (2-dx, d. height-2*dy+1, 2*dx, dy-1, 0, 360);

g.drawArctd.width (2−3*dx, d. height-3*dy/2−5, dx, dy/2, 0, 360);

g.drawArctd.width (2+2*dx, d. height-3*dy/2 — 5, dx, dy/2, 0, 360);

Font fl = new Font («Serif», Font. BOLD (Font.ITALIC, 2*dy);

Font f2 = new Font («Serif», Font. BOLD, 5*dy/2);

FontMetrics fml = getFontMetrics (fl);

FontMetrics fm2 = getFontMetrics (f2);

String s1 = «Π’сякая послСдняя ошибка» ;

String s2 = «ΡΠ²Π»ΡΠ΅Ρ‚ся прСдпослСднСй.» ;

String s3 = «Π—Π°ΠΊΠΎΠ½ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ» ;

int firstLine = d. height/3;

int nextLine = fml. getHeight ();

int secondLine = firstLine+nextLine/2;

g.setFont (f2);

g.drawstring (s3, (d.width-fm2.stringWidth (s3))/2, firstLine);

g.drawLine (d.width/4, secondLine-2, 3*d.width/4, secondLine-2);

g.drawLine (d.width/4, secondLine—1, 3*d.width/4, secondLine-1);

g.drawLine (d.width/4, secondLine, 3*d.width/4, secondLine);

g.setFont (fl);

g.drawstring (s1,(d.width-fml.stringWidth (s1))/2, firstLine+2*nextLine);

g.drawString (s2,(d.width-fml.stringWidth (s2))/2, firstLine+3*nextLine);

}

public static void main (String[] args){

GraphTest f = new GraphTest («ΠŸΡ€ΠΈΠΌΠ΅Ρ€ рисования»);

f.addWindowListener (new WindowAdapter (){

public void windowClosing (WindowEvent ev){

System.exit (0);

}

});

}

}

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 1 использован простой класс Dimension, главная Π·Π°Π΄Π°Ρ‡Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ — Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ Π²Ρ‹ΡΠΎΡ‚Ρƒ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΡΠ²ΠΎΠΈΡ… полях width ΠΈ height. ΠœΠ΅Ρ‚ΠΎΠ΄ getSize () класса component Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Dimension. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ 1 Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° f Ρ‚ΠΈΠΏΠ° GrapTest установлСны Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ setBounds () Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ 500×300 пиксСлов.

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 1 — для вычСрчивания толстой Π»ΠΈΠ½ΠΈΠΈ, ΠΎΡ‚Π΄Π΅Π»ΡΡŽΡ‰Π΅ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΡ‚ Ρ‚Скста, ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ провСсти Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ прямыС Π½Π° Ρ€Π°ΡΡΡ‚оянии ΠΎΠ΄ΠΈΠ½ пиксСл Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°.

Рис. 2. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования класса Graphics

Как Π²Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΈΠ· ΠΎΠ±Π·ΠΎΡ€Π° класса Graphics ΠΈ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π΅ΠΌΡƒ классов, срСдства рисования ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° тСкста Π² ΡΡ‚ΠΎΠΌ классС вСсьма ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹. Π›ΠΈΠ½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΏΠ»ΠΎΡˆΠ½Ρ‹Π΅ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½ΠΎΠΉ Π² ΠΎΠ΄ΠΈΠ½ пиксСл, тСкст выводится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΈ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡ€Π°Π²ΠΎ, Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ особСнности устройства Π²Ρ‹Π²ΠΎΠ΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ экрана.

Π­Ρ‚ΠΈ ограничСния ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ хитростями: Ρ‡Π΅Ρ€Ρ‚ΠΈΡ‚ΡŒ нСсколько ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Π»ΠΈΠ½ΠΈΠΉ, ΠΏΡ€ΠΈΠΆΠ°Ρ‚Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ ΠΊ Π΄Ρ€ΡƒΠ³Ρƒ, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 1, ΠΈΠ»ΠΈ ΡƒΠ·ΠΊΠΈΠΉ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ тСкст ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Π΅, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ экрана ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ getScreenSize () класса Java.awt.Toolkit ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ. Но Π²ΡΠ΅ это затрудняСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π»ΠΈΡˆΠ°Π΅Ρ‚ Π΅Π³ΠΎ стройности ΠΈ Π΅ΡΡ‚СствСнности.

Π’ Java 2 класс Graphics, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… систСмы Java 2D, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ классом Graphics2D.

ВозмоТности Java 2D

Π’ ΡΠΈΡΡ‚Π΅ΠΌΡƒ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² Java 2D, основа ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ— класс Graphics2D ΠΏΠ°ΠΊΠ΅Ρ‚Π° java. awt, внСсСно нСсколько ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ:

Β· ΠšΡ€ΠΎΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½ΠΎΠΉ систСмы, принятой Π² ΠΊΠ»Π°ΡΡΠ΅ Graphics ΠΈ Π½Π°Π·Π²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½Ρ‹ΠΌ пространством ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (User Space), Π²Π²Π΅Π΄Π΅Π½Π° Π΅Ρ‰Π΅ систСма ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства Π²Ρ‹Π²ΠΎΠ΄Π° (Device Space): экрана ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°, ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π°. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Graphics2D автоматичСски пСрСводят (transform) систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² ΡΠΈΡΡ‚Π΅ΠΌΡƒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ устройства ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ.

Β· ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ устройства ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ «Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ», ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ способно ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ любоС Π°Ρ„Ρ„ΠΈΠ½Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ плоскости, Π² Ρ‡Π°ΡΡ‚ности, ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π½Π° Π»ΡŽΠ±ΠΎΠΉ ΡƒΠ³ΠΎΠ» ΠΈ/ΠΈΠ»ΠΈ сТатиС/растяТСниС. Оно опрСдСляСтся ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса AffineTransform. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ setTransform (). Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ «Π½Π° Π»Π΅Ρ‚Ρƒ» ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ transform () ΠΈ translate () ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ concatenate ().

Β· ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π°Ρ„Ρ„ΠΈΠ½Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ вСщСствСнно, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ вСщСствСнными, Π° Π½Π΅ Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами.

Β· ГрафичСскиС ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹: ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, ΠΎΠ²Π°Π», Π΄ΡƒΠ³Π° ΠΈ Π΄Ρ€., Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ интСрфСйс shape ΠΏΠ°ΠΊΠ΅Ρ‚Π° java.awt. Для ΠΈΡ… Π²Ρ‹Ρ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ для всСх Ρ„ΠΈΠ³ΡƒΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ draw (), Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ способСн ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π²ΡˆΠΈΠΉ интСрфСйс shape. Π’Π²Π΅Π΄Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ fill (), Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹— ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π²ΡˆΠ΅Π³ΠΎ интСрфСйс shape.

Β· Для вычСрчивания (Stroke) Π»ΠΈΠ½ΠΈΠΉ Π²Π²Π΅Π΄Π΅Π½ΠΎ понятиС ΠΏΠ΅Ρ€Π° (Ρ€Π΅n). Бвойства ΠΏΠ΅Ρ€Π° описываСт интСрфСйс Stroke. Класс BasicStroke Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ этот интСрфСйс. ΠŸΠ΅Ρ€ΠΎ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ характСристиками:

o ΠΎΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Ρƒ (width) Π² ΠΎΠ΄ΠΈΠ½ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) ΠΈΠ»ΠΈ нСсколько пиксСлов;

o ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ линию (end cap) Π·Π°ΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ΠΌ — статичСская константа CAP_ROUND, прямым ΠΎΠ±Ρ€Π΅Π·ΠΎΠΌ — CAP_SQUARE (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), ΠΈΠ»ΠΈ Π½Π΅ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ способ окончания — CAP_BUTT;

o ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΏΡ€ΡΠ³Π°Ρ‚ΡŒ Π»ΠΈΠ½ΠΈΠΈ (line joins) Π·Π°ΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ΠΌ — статичСская константа JOIN_ROOND, ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΎΠΌ прямой — JOIN_BEVEL, ΠΈΠ»ΠΈ просто ΡΠΎΡΡ‚Ρ‹ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ — JOIN_MITER (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ);

o ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‡Π΅Ρ€Ρ‚ΠΈΡ‚ΡŒ линию Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡƒΠ½ΠΊΡ‚ΠΈΡ€Π°ΠΌΠΈ (dash) ΠΈ ΡˆΡ‚Ρ€ΠΈΡ…-ΠΏΡƒΠ½ΠΊΡ‚ΠΈΡ€Π°ΠΌΠΈ, Π΄Π»ΠΈΠ½Ρ‹ ΡˆΡ‚Ρ€ΠΈΡ…ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΎΠ² Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, элСмСнты массива с Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌΠΈ индСксами Π·Π°Π΄Π°ΡŽΡ‚ Π΄Π»ΠΈΠ½Ρƒ ΡˆΡ‚Ρ€ΠΈΡ…Π°, с Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌΠΈ индСксами — Π΄Π»ΠΈΠ½Ρƒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ ΡˆΡ‚Ρ€ΠΈΡ…Π°ΠΌΠΈ.

Β· ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ заполнСния Ρ„ΠΈΠ³ΡƒΡ€ описаны Π² ΠΈΠ½Ρ‚СрфСйсС Paint. Π’Ρ€ΠΈ класса Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ этот интСрфСйс. Класс Color Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ сплошной (solid) Π·Π°Π»ΠΈΠ²ΠΊΠΎΠΉ, класс GradientPaint — Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½Ρ‹ΠΌ (gradient) Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ†Π²Π΅Ρ‚ ΠΏΠ»Π°Π²Π½ΠΎ мСняСтся ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅, класс TexturePaint — Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΎΠ±Ρ€Π°Π·Ρ†Ρƒ (pattern fill).

Β· Π‘ΡƒΠΊΠ²Ρ‹ тСкста ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, Ρ‚. Π΅. ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйс shape, ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Ρ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ draw () с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ всСх возмоТностСй этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠŸΡ€ΠΈ ΠΈΡ… Π²Ρ‹Ρ‡Π΅Ρ€Ρ‡ΠΈΠ²Π°Π½ΠΈΠΈ примСняСтся ΠΏΠ΅Ρ€ΠΎ, всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ заполнСния ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ.

Β· ΠšΡ€ΠΎΠΌΠ΅ ΠΈΠΌΠ΅Π½ΠΈ, стиля ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΡˆΡ€ΠΈΡ„Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ тСкста, Π²Ρ‹Π²ΠΎΠ΄ тСкста справа Π½Π°Π»Π΅Π²ΠΎ. Π¦Π²Π΅Ρ‚ тСкста ΠΈ Π΅Π³ΠΎ Ρ„ΠΎΠ½Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ самого тСкста, Π° Π½Π΅ Π³Ρ€Π°Ρ„ичСского контСкста. МоТно Π·Π°Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·Π½ΡƒΡŽ ΡˆΠΈΡ€ΠΈΠ½Ρƒ символов ΡˆΡ€ΠΈΡ„Ρ‚Π°, надстрочныС ΠΈ ΠΏΠΎΠ΄ΡΡ‚Ρ€ΠΎΡ‡Π½Ρ‹Π΅ индСксы. Атрибуты ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ константами класса TextAttribute.

Β· ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (rendering) рСгулируСтся ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ (hints), ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ константами класса RenderingHints.

Π‘ Ρ‚Π°ΠΊΠΈΠΌΠΈ возмоТностями Java 2D стала ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ систСмой рисования, Π²Ρ‹Π²ΠΎΠ΄Π° тСкста ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ эти возмоТности, ΠΈ ΠΊΠ°ΠΊ ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ прСобразования ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ графичСского устройства (transform) задаСтся автоматичСски ΠΏΡ€ΠΈ создании графичСского контСкста Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ†Π²Π΅Ρ‚ ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚. Π’ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ setTransform () Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ мСняСтся Ρ†Π²Π΅Ρ‚ ΠΈΠ»ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚. АргумСнтом этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° слуТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса AffineTransform ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° java.awt.geom, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ класса Π‘olor ΠΈΠ»ΠΈ Font ΠΏΡ€ΠΈ Π·Π°Π΄Π°Π½ΠΈΠΈ Ρ†Π²Π΅Ρ‚Π° ΠΈΠ»ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚Π°.

Рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ класс AffineTransform.

Класс AffineTransform

АффинноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ задаСтся двумя основными конструкторами класса AffineTransform:

AffineTransform (double a, double b, double с, double d, double e, double f)

AffineTransform (float a, float b, float c, float d, float e, float f)

ΠŸΡ€ΠΈ этом Ρ‚ΠΎΡ‡ΠΊΠ° с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (Ρ…, Ρƒ) Π² ΠΏΡ€ΠΎΡΡ‚ранствС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ Π² Ρ‚ΠΎΡ‡ΠΊΡƒ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (Π°*Ρ…+с*Ρƒ+Π΅, b*x+d*y+f) Π² ΠΏΡ€ΠΎΡΡ‚ранствС графичСского устройства.

Π’Π°ΠΊΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΠΈΡΠΊΡ€ΠΈΠ²Π»ΡΠ΅Ρ‚ ΠΏΠ»ΠΎΡΠΊΠΎΡΡ‚ΡŒ — прямыС Π»ΠΈΠ½ΠΈΠΈ пСрСходят Π² ΠΏΡ€ΡΠΌΡ‹Π΅, ΡƒΠ³Π»Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ линиями ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Π°Ρ„Ρ„ΠΈΠ½Π½Ρ‹Ρ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ слуТат ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ любой Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° Π»ΡŽΠ±ΠΎΠΉ ΡƒΠ³ΠΎΠ», ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ сдвиги, отраТСния ΠΎΡ‚ ΠΎΡΠ΅ΠΉ, сТатия ΠΈ Ρ€Π°ΡΡ‚яТСния ΠΏΠΎ ΠΎΡΡΠΌ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° конструктора ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° массив {Π°, b, с, d, e, f} ΠΈΠ»ΠΈ {a, b, c, d}, Ссли e = f = 0, составлСнный ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΆΠ΅ коэффициСнтов Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС:

AffineTransform (double[] arr)

AffineTransform (float[] arr)

ΠŸΡΡ‚Ρ‹ΠΉ конструктор создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΌΡƒΡΡ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ:

AffineTransform (AffineTransform at)

ШСстой конструктор — конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ — создаСт тоТдСствСнноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅:

AffineTransform ()

Π­Ρ‚ΠΈ конструкторы матСматичСски Ρ‚ΠΎΡ‡Π½Ρ‹, Π½ΠΎ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½Ρ‹ ΠΏΡ€ΠΈ Π·Π°Π΄Π°Π½ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ коэффициСнты ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π½Π° 57Β° Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ‚ΠΎΡ‡ΠΊΠΈ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (20, 40).

Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ статичСскими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса AffineTransform.

Β· getRotateInstance (double angle) — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π½Π° ΡƒΠ³ΠΎΠ» angle, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…, Π²ΠΎΠΊΡ€ΡƒΠ³ Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Ρ‚Π°ΠΊΠΎΠ²ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ оси ΠžΡ… ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ся Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΊ ΠΎΡΠΈ ΠžΡƒ. Если оси ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π΅ ΠΌΠ΅Π½ΡΠ»ΠΈΡΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ отраТСния, Ρ‚ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ angle Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΏΠΎ Ρ‡Π°ΡΠΎΠ²ΠΎΠΉ стрСлкС.

Β· getRotateInstance (double angle, double x, double Ρƒ) — Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ‚ΠΎΡ‡ΠΊΠΈ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (Ρ…, Ρƒ).

Β· getScalelnstance (double sx, double sy) — измСняСт ΠΌΠ°ΡΡˆΡ‚Π°Π± ΠΏΠΎ ΠΎΡΠΈ ΠžΡ… Π² sx Ρ€Π°Π·, ΠΏΠΎ ΠΎΡΠΈ ΠžΡƒ — Π² sy Ρ€Π°Π·.

Β· getSharelnstance (double shx, double shy) — ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ (x, Ρƒ) Π² Ρ‚ΠΎΡ‡ΠΊΡƒ (x+shx*y, shy*x+y).

Β· getTranslateInstance (double tx, double ty)—сдвигаСт ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ (Ρ…, Ρƒ) Π² Ρ‚ΠΎΡ‡ΠΊΡƒ (x+tx, y+ty).

ΠœΠ΅Ρ‚ΠΎΠ΄ createInverse () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ.

ПослС создания прСобразования Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ:

setTransform (AffineTransform at)

setTransform (double a, double b, double c, double d, double e, double f)

setToIdentity ()

setToRotation (double angle)

setToRotation (double angle, double x, double y)

setToScale (double sx, double sy)

setToShare (double shx, double shy)

setToTranslate (double tx, double ty)

сдСлав Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΡ‚ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ, Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ:

concatenate (AffineTransform at)

rotate (double angle)

rotate (double angle, double x, double y)

scale (double sx, double sy)

shear (double shx, double shy)

translate (double tx, double ty)

Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, образуя ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ preConcatenate (AffineTransform at), Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², осущСствляСтся послС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ прСобразования.

ΠŸΡ€ΠΎΡ‡ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса AffineTransform производят прСобразования Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€ Π² ΠΏΡ€ΠΎΡΡ‚ранствС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° paint () Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 1 Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΊΠ°ΠΊ записано Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 2.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ пространства ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

// Начало ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 1…

public void paint (Graphics gr){

Graphics2D g = (Graphics2D)gr;

AffineTransform at =

AffineTransform.getRotatelnstance (-Math.PI/4.0, 250.0,150.0);

at.concatenate (new AffineTransform (0.5, 0.0, 0.0, 0.5, 100.0, 60.0));

g.setTransform (at);

Dimension d = getSize ();

// ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 1…

ΠœΠ΅Ρ‚ΠΎΠ΄ paint () начинаСтся с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ экзСмпляра gr ΠΊΠ»Π°ΡΡΠ° Graphics2D простым ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° gr ΠΊ Ρ‚ΠΈΠΏΡƒ Graphics2D. Π—Π°Ρ‚Π΅ΠΌ, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ getRotatelnstance () опрСдСляСтся ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π½Π° 45Β° ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ‚ΠΎΡ‡ΠΊΠΈ (250.0, 150.0). Π­Ρ‚ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅— экзСмпляр at ΠΊΠ»Π°ΡΡΠ° AffineTransform. ΠœΠ΅Ρ‚ΠΎΠ΄ concatenate (), выполняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ at, добавляСт ΠΊ ΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ сТатиС Π² Π΄Π²Π° Ρ€Π°Π·Π° ΠΏΠΎ ΠΎΠ±Π΅ΠΈΠΌ осям ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΈ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡ Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π² Ρ‚ΠΎΡ‡ΠΊΡƒ (100.0, 60.0). НаконСц, композиция этих ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ устанавливаСтся ΠΊΠ°ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° g ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ setTransform ().

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ выполняСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ порядкС. Π‘Π½Π°Ρ‡Π°Π»Π° пространство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ сТимаСтся Π² Π΄Π²Π° Ρ€Π°Π·Π° вдоль ΠΎΠ±Π΅ΠΈΡ… осСй, Π·Π°Ρ‚Π΅ΠΌ Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ — Π»Π΅Π²Ρ‹ΠΉ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΠ³ΠΎΠ» — пСрСносится Π² Ρ‚ΠΎΡ‡ΠΊΡƒ (100.0, 60.0) пространства графичСского устройства. ΠŸΠΎΡ‚ΠΎΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° поворачиваСтся Π½Π° ΡƒΠ³ΠΎΠ» 45Β° ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ‚ΠΎΡ‡ΠΊΠΈ (250.0, 150.0).

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этих ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° Ρ€ΠΈΡ. 3.

Рис. 3. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚

РисованиС Ρ„ΠΈΠ³ΡƒΡ€ срСдствами Java2D

Π₯арактСристики ΠΏΠ΅Ρ€Π° для рисования Ρ„ΠΈΠ³ΡƒΡ€ описаны Π² ΠΈΠ½Ρ‚СрфСйсС Stroke. Π’ Java 2D Π΅ΡΡ‚ΡŒ ΠΏΠΎΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ этот интСрфСйс — класс BasicStroke.

Класс BasicStroke

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ класса BasicStroke ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ характСристики ΠΏΠ΅Ρ€Π°. Основной конструктор

BasicStroke (float width, int cap, int join, float miter, float[] dash, float dashBegin)

Π·Π°Π΄Π°Π΅Ρ‚:

Β· Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Ρƒ ΠΏΠ΅Ρ€Π° width Π² ΠΏΠΈΠΊΡΠ΅Π»Π°Ρ…;

Β· ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π° Π»ΠΈΠ½ΠΈΠΈ cap; это ΠΎΠ΄Π½Π° ΠΈΠ· ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚:

o CAP_ROUND — Π·Π°ΠΊΡ€ΡƒΠ³Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ½Π΅Ρ† Π»ΠΈΠ½ΠΈΠΈ;

o CAP_SQUARE — ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Π΅Ρ† Π»ΠΈΠ½ΠΈΠΈ;

o CAP_BUTT — ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ отсутствуСт;

Β· способ сопряТСния Π»ΠΈΠ½ΠΈΠΉ join; это ΠΎΠ΄Π½Π° ΠΈΠ· ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚:

o JOIN_ROUND — Π»ΠΈΠ½ΠΈΠΈ ΡΠΎΠΏΡ€ΡΠ³Π°ΡŽΡ‚ΡΡ Π΄ΡƒΠ³ΠΎΠΉ окруТности;

o JOIN_BEVEL — Π»ΠΈΠ½ΠΈΠΈ ΡΠΎΠΏΡ€ΡΠ³Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΎΠΌ прямой, пСрпСндикулярным биссСктрисС ΡƒΠ³Π»Π° ΠΌΠ΅ΠΆΠ΄Ρƒ линиями;

o JOIN_MITER — Π»ΠΈΠ½ΠΈΠΈ просто ΡΡ‚Ρ‹ΠΊΡƒΡŽΡ‚ΡΡ;

Β· расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ линиями miter, начиная с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ примСняСтся сопряТСниС JOIN_MITER;

Β· Π΄Π»ΠΈΠ½Ρƒ ΡˆΡ‚Ρ€ΠΈΡ…ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ ΡˆΡ‚Ρ€ΠΈΡ…Π°ΠΌΠΈ — массив dash; элСмСнты массива с Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌΠΈ индСксами Π·Π°Π΄Π°ΡŽΡ‚ Π΄Π»ΠΈΠ½Ρƒ ΡˆΡ‚Ρ€ΠΈΡ…Π° Π² ΠΏΠΈΠΊΡΠ΅Π»Π°Ρ…, элСмСнты с Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌΠΈ индСксами — Π΄Π»ΠΈΠ½Ρƒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ°; массив пСрСбираСтся цикличСски;

Β· индСкс dashBegin, начиная с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ элСмСнты массива

Β· dash.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ конструкторы Π·Π°Π΄Π°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ характСристики ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:

Β· BasicStroke (float width, int cap, int join, float miter) — сплошная линия;

Β· BasicStroke (float width, int cap, int join) — сплошная линия с ΡΠΎΠΏΡ€ΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ JOIN_ROUND ΠΈΠ»ΠΈ JOIN_BEVEL; для сопряТСния JOIN_MITER задаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ miter = 10.0f;

Β· BasicStroke (float width) — прямой ΠΎΠ±Ρ€Π΅Π· CAP_SQUARE ΠΈ ΡΠΎΠΏΡ€ΡΠΆΠ΅Π½ΠΈΠ΅ JOIN_MITER со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ miter = 10.0f;

Β· BasicStroke () — ΡˆΠΈΡ€ΠΈΠ½Π°1. 0f.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 3 ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΡΡ‚ΡŒ ΠΏΠ΅Ρ€ΡŒΠ΅Π² с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ характСристиками, рис 4 ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€ΠΈΡΡƒΡŽΡ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€ΡŒΠ΅Π²

import java.awt.*;

import java.awt.geom. *;

import java.awt.event.*;

class StrokeTest extends Frame{

StrokeTest (String s) {

super (s) ;

setSize (500, 400);

setvisible (true);

addWindowListener (new WindowAdapter (){

public void windowClosing (WindowEvent ev)(

System.exit (0);

}

});

}

public void paint (Graphics gr){

Graphics2D g = (Graphics2D)gr;

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

BasicStroke pen1 = new BasicStroke (20, BasicStroke. CAP_BUTT,

BasicStroke.JOIN_MITER, 30);

BasicStroke pen2 = new BasicStroke (20, BasicStroke. CAP_ROUND,

BasicStroke.JOIN_ROUND);

BasicStroke Ρ€Π΅nΠ— = new BasicStroke (20, BasicStroke. CAP_SQUARE,

BasicStroke.JOIN_BEVEL);

floatf] dash1 = {5, 20};

BasicStroke pen4 = new BasicStroke (10, BasicStroke. CAP_ROUND,

BasicStroke.JOIN_BEVEL, 10, dashl, 0);

float[] dash2 = (10, 5, 5, 5};

BasicStroke pen5 = new BasicStroke (10, BasicStroke. CAP_BUTT, BasicStroke. JOIN_BEVEL, 10, dash2, 0);

g.setStroke (pen1);

g.draw (new Rectangle2D. Double (50, 50, 50, 50));

g.draw (new Line2D. Double (50, 180, 150, 180));

g.setStroke (pen2);

g.draw (new Rectangle2D. Double (200, 50, 50, 50));

g.draw (new Line2D. Double (50, 230, 150, 230));

g.setStroke (Ρ€Π΅n3);

g.draw (new Rectangle2D. Double (350, 50, 50, 50));

g.draw (new Line2D. Double (50, 280, 150, 280));

g.drawstring («JOIN_MITER», 40, 130);

g.drawstring («JOIN_ROUND», 180, 130);

g.drawstring («JOINJBEVEL», 330, 130);

g.drawstring («CAP_BUTT», 170, 190);

g.drawstring («CAP_ROUND», 170, 240);

g.drawstring («CAP_SQUARE», 170, 290);

g.setStroke (pen5);

g.drawfnew Line2D. Double (50, 330, 250, 330));

g.setStroke (pen4);

g.draw (new Line2D. Double (50, 360, 250, 360));

g.drawString («{10, 5, 5, 5,…}», 260, 335);

g.drawstring («(5, 10,…)», 260, 365);

}

public static void main (String[] args){

new StrokeTest («ΠœΠΎΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°»);

}

}

Рис. 4. ΠŸΠ΅Ρ€ΡŒΡ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ характСристиками.

ПослС создания ΠΏΠ΅Ρ€Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ΅Ρ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ setStroke () ΠΌΠΎΠΆΠ½ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ draw () ΠΈ fill ().

ΠžΠ±Ρ‰ΠΈΠ΅ свойства Ρ„ΠΈΠ³ΡƒΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ draw () класса Graphics2D, описаны Π² ΠΈΠ½Ρ‚СрфСйсС shape. Π­Ρ‚ΠΎΡ‚ интСрфСйс Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ для создания ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Ρ„ΠΈΠ³ΡƒΡ€ — ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ², прямых, эллипсов, Π΄ΡƒΠ³, Ρ‚ΠΎΡ‡Π΅ΠΊ — классами Rectangle2D, RoundRectangle2D, Line2D, Ellipse2D, Arc2D, Point2D ΠΏΠ°ΠΊΠ΅Ρ‚Π° java.awt.geom. Π’ ΡΡ‚ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ классы CubicCurve2D ΠΈ QuadCurve2D для создания ΠΊΡ€ΠΈΠ²Ρ‹Ρ… Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ порядка.

ВсС эти классы абстрактныС, Π½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ — Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы Double ΠΈ Float для задания ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ числами ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 3 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ классы Rectangle2D. Double И Line2D. Double для вычСрчивания ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ² ΠΈ ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΎΠ².

Класс GeneralPath

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса java.awt.geom.GeneralPath ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ слоТныС конструкции, составлСнныС ΠΈΠ· ΠΎΡ‚Ρ€Π΅Π·ΠΊΠΎΠ² прямых ΠΈΠ»ΠΈ ΠΊΡ€ΠΈΠ²Ρ‹Ρ… Π»ΠΈΠ½ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… Ρ„ΠΈΠ³ΡƒΡ€, соСдинСнных ΠΈΠ»ΠΈ Π½Π΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ собой. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ этот класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс shape, Π΅Π³ΠΎ экзСмпляры сами ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΠΈΠ³ΡƒΡ€Π°ΠΌΠΈ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ элСмСнтами Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса GeneralPath.

Π’Π½Π°Ρ‡Π°Π»Π΅ создаСтся пустой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса GeneralPath конструктором ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ GeneralPath () ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, содСрТащий ΠΎΠ΄Π½Ρƒ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ, конструктором GeneralPath (Shape sh).

Π—Π°Ρ‚Π΅ΠΌ ΠΊ ΡΡ‚ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ append (Shape sh, boolean connect)

Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ connect Ρ€Π°Π²Π΅Π½ true, Ρ‚ΠΎ Π½ΠΎΠ²Π°Ρ Ρ„ΠΈΠ³ΡƒΡ€Π° соСдиняСтся с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π°ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π°.

Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π΅ΡΡ‚ΡŒ тСкущая Ρ‚ΠΎΡ‡ΠΊΠ°. Π’Π½Π°Ρ‡Π°Π»Π΅ Π΅Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ (0, 0), Π·Π°Ρ‚Π΅ΠΌ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Ρ‚ΠΎΡ‡ΠΊΡƒ (Ρ…, Ρƒ) ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ moveTo (float x, float Ρƒ).

ΠžΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ΅ (Ρ…, Ρƒ) ΠΌΠΎΠΆΠ½ΠΎ провСсти:

Β· ΠΎΡ‚Ρ€Π΅Π·ΠΎΠΊ прямой ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ lineTo (float x, float Ρƒ);

Β· ΠΎΡ‚Ρ€Π΅Π·ΠΎΠΊ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΡ‡Π½ΠΎΠΉ ΠΊΡ€ΠΈΠ²ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ quadTo (float xi, float yl, float x, float y),

Β· ΠΊΡ€ΠΈΠ²ΡƒΡŽ Π‘Π΅Π·ΡŒΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ curveTo (float xl, float yl, float x2, float y2, float x, float y).

Π’Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ послС этого становится Ρ‚ΠΎΡ‡ΠΊΠ° (Ρ…, Ρƒ). ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ closePath (). Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ:

GeneralPath p = new GeneralPath ();

p.moveTo (xl, yl); // ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ,

p.lineTo (x2, y2); // ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ сторону Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° Π΄ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹,

p.lineTo (x3, ΡƒΠ—); // ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ Π²Ρ‚ΠΎΡ€ΡƒΡŽ сторону,

p.closePath (); // ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ сторону Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹

Бпособы заполнСния Ρ„ΠΈΠ³ΡƒΡ€ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΈΠ½Ρ‚СрфСйсС Paint. Π’ Π½Π°ΡΡ‚оящСС врСмя Java 2D содСрТит Ρ‚Ρ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого интСрфСйса — классы Color, GradientPaint ΠΈ TexturePamt.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΠΈ с ΠΊΡƒΡ€ΡΠΎΡ€Π°ΠΌΠΈ

Класс Cursor

Основа класса — статичСскиС константы, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡƒ курсора:

Β· CROSSHAIR_CURSOR — курсор Π² Π²ΠΈΠ΄Π΅ крСста, появляСтся ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ поискС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ для размСщСния ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ элСмСнта;

Β· DEFAULT_CURSOR — обычная Ρ„ΠΎΡ€ΠΌΠ° курсора — стрСлка Π²Π»Π΅Π²ΠΎ Π²Π²Π΅Ρ€Ρ…;

Β· HAND_CURSOR — «ΡƒΠΊΠ°Π·ΡƒΡŽΡ‰ΠΈΠΉ пСрст», появляСтся ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ элСмСнта списка;

Β· MOVE_CURSOR — крСст со ΡΡ‚Ρ€Π΅Π»ΠΊΠ°ΠΌΠΈ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ элСмСнта;

Β· TEXT_CURSOR — Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ Ρ‡Π΅Ρ€Ρ‚Π°, появляСтся Π² Ρ‚Скстовых полях;

Β· WAIT_CURSOR — ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ часов, появляСтся ΠΏΡ€ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ курсоры ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΊ ΠΊΡ€Π°ΡŽ ΠΈΠ»ΠΈ ΡƒΠ³Π»Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

Β· E_RESIZE_CURSOR — стрСлка Π²ΠΏΡ€Π°Π²ΠΎ с ΡƒΠΏΠΎΡ€ΠΎΠΌ;

Β· N_RESIZE_CURSOR — стрСлка Π²Π²Π΅Ρ€Ρ… с ΡƒΠΏΠΎΡ€ΠΎΠΌ;

Β· NE_RESIZE_CURSOR — стрСлка Π²ΠΏΡ€Π°Π²ΠΎ Π²Π²Π΅Ρ€Ρ…, ΡƒΠΏΠΈΡ€Π°ΡŽΡ‰Π°ΡΡΡ Π² ΡƒΠ³ΠΎΠ»;

Β· NW_RESIZE_CURSOR — стрСлка Π²Π»Π΅Π²ΠΎ Π²Π²Π΅Ρ€Ρ…, ΡƒΠΏΠΈΡ€Π°ΡŽΡ‰Π°ΡΡΡ Π² ΡƒΠ³ΠΎΠ»;

Β· S_RESIZE_CURSOR — стрСлка Π²Π½ΠΈΠ· с ΡƒΠΏΠΎΡ€ΠΎΠΌ;

Β· SE_RESIZE_CURSOR — стрСлка Π²ΠΏΡ€Π°Π²ΠΎ Π²Π½ΠΈΠ·, ΡƒΠΏΠΈΡ€Π°ΡŽΡ‰Π°ΡΡΡ Π² ΡƒΠ³ΠΎΠ»;

Β· SW_RESIZE_CURSOR — стрСлка Π²Π»Π΅Π²ΠΎ Π²Π½ΠΈΠ·, ΡƒΠΏΠΈΡ€Π°ΡŽΡ‰Π°ΡΡΡ Π² ΡƒΠ³ΠΎΠ»;

Β· W_RESIZE_CURSOR — стрСлка Π²Π»Π΅Π²ΠΎ с ΡƒΠΏΠΎΡ€ΠΎΠΌ.

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Π΅ константы ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ type Π² ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π΅ класса Cursor (int type).

ВмСсто конструктора ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΡΡ‚атичСскому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ getPredefinedCursor (int type), ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Cursor ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΌΡƒ ссылку Π½Π° Π½Π΅Π³ΠΎ.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ курсор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ статичСским ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ getDefauitcursor (). Π—Π°Ρ‚Π΅ΠΌ созданный курсор Π½Π°Π΄ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. НапримСр, послС выполнСния:

Cursor curs = new Cursor (Cursor.WAIT_CURSOR);

someComp.setCursor (curs);

ΠΏΡ€ΠΈ появлСнии указатСля ΠΌΡ‹ΡˆΠΈ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ somecomp ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π²ΠΈΠ΄ часов.

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой курсор

ΠšΡ€ΠΎΠΌΠ΅ этих ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… курсоров ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ курсора. Π•Π΅ Ρ‚ΠΈΠΏ носит Π½Π°Π·Π²Π°Π½ΠΈΠ΅ CUSTOM_CURSOR. Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свой курсор ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ

createCustomCursor (Image cursor, Point hotspot, String name)

ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Cursor ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌ ссылку Π½Π° Π½Π΅Π³ΠΎ. ΠŸΠ΅Ρ€Π΅Π΄ этим слСдуСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ курсора cursor — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Image. АргумСнт name Π·Π°Π΄Π°Π΅Ρ‚ имя курсора, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ просто null. АргумСнт hotspot Π·Π°Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ фокуса курсора. Π­Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… изобраТСния курсора, Ρ‚ΠΎΡ‡Π½Π΅Π΅, Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ…, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ

getBestCursorSize (int desiredWidth, int desiredHeight)

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌ ссылку Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Dimension. АргумСнты ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ курсора. Если графичСская систСма Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°Π΅Ρ‚ созданиС курсоров, возвращаСтся (0, 0). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ курсора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаст графичСская систСма, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, (32, 32). Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ cursor Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠ³Π½Π°Π½ΠΎ ΠΏΠΎΠ΄ этот Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ этом Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ искаТСния.

Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄— getMaximumCursorColors () — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ наибольшСС количСство Ρ†Π²Π΅Ρ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 256, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ курсора.

Π­Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса java.awt.Toolkit, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ. Класс Toolkit содСрТит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Java со ΡΡ€Π΅Π΄ΡΡ‚Π²Π°ΠΌΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выполняСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ нСльзя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр класса Toolkit конструктором, для Π΅Π³ΠΎ получСния слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ Toolkit. getDefaultToolkit ().

Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΎΠΊΠ½Π΅ Window ΠΈΠ»ΠΈ Π΅Π³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΡ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Frame, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ экзСмпляр Toolkit ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ getToolkit () класса Window.

Π‘ΠΎΠ±Π΅Ρ€Π΅ΠΌ всС это вмСстС:

Toolkit tk = Toolkit. getDefaultToolkit ();

int colorMax = tk. getMaximumCursorColors (); // НаибольшСС число Ρ†Π²Π΅Ρ‚ΠΎΠ²

Dimension d = tk. getBestCursorSize (50, 50); // d — Ρ€Π°Π·ΠΌΠ΅Ρ€ изобраТСния

int w = d. width, h = d. height, k = 0;

Point p = new Point (0, 0); // Ѐокус курсора Π±ΡƒΠ΄Π΅Ρ‚

// Π² Π΅Π³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ

int[] pix = new int[w * h]; // Π—Π΄Π΅ΡΡŒ Π±ΡƒΠ΄ΡƒΡ‚ пиксСлы

//изобраТСния

for (int i = 0; i < w; i++)

for (int j = 0; j < h; j++)

if (j < i) pix[k++] = 0xFFFF0000; // Π›Π΅Π²Ρ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ ΡƒΠ³ΠΎΠ» ;

//красный

else pix[k++] = 0; // ΠŸΡ€Π°Π²Ρ‹ΠΉ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΠ³ΠΎΠ» —

//ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ

// БоздаСтся ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ (w, h),

// Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ΅ массивом пиксСлов pix, с Π΄Π»ΠΈΠ½ΠΎΠΉ строки w

Image im = createImage (new MemoryImageSource (w, h, pix, 0, w));

Cursor curs = tk. createCustomCursor (im, p, null);

someComp.setCursor (curs);

Π’ ΡΡ‚ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся курсор Π² Π²ΠΈΠ΄Π΅ красного ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° с ΠΊΠ°Ρ‚Π΅Ρ‚Π°ΠΌΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 32 пиксСла ΠΈ ΡƒΡΡ‚анавливаСтся Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ someComp.

Бобытия

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ ComponentEvent происходит ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ с ΡΠΊΡ€Π°Π½Π° ΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠΈ Π½Π° ΡΠΊΡ€Π°Π½Π΅.

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ FocusEvent Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΡ‚Π΅Ρ€Π΅ фокуса.

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ KeyEvent проявляСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΈ ΠΎΡ‚пускании клавиши, Ссли ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ фокус Π²Π²ΠΎΠ΄Π°.

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ MouseEvent происходит ΠΏΡ€ΠΈ манипуляциях ΠΌΡ‹ΡˆΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 3. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° дСйствий ΠΌΡ‹ΡˆΠΈ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° дСйствий ΠΌΡ‹ΡˆΠΈ

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ MouseEvent Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ ΠΏΠΎ Π»ΡŽΠ±ΠΎΠΉ ΠΈΠ· ΡΠ΅ΠΌΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½:

Β· Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ MOUSE_PRESSED;

Β· отпусканиС ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ MOUSE_RELEASED;

Β· Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ MOUSE_CLICKED (Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΈ ΠΎΡ‚пусканиС Π½Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ся);

Β· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΡ‹ΡˆΠΈ — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ MOUSE_MOVED;

Β· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΡ‹ΡˆΠΈ с Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ MOUSE_DRAGGED;

Β· появлСниС курсора ΠΌΡ‹ΡˆΠΈ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ MOUSE_ENTERED;

Β· Π²Ρ‹Ρ…ΠΎΠ΄ курсора ΠΌΡ‹ΡˆΠΈ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ MOUSE_EXITED.

Для ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΅ΡΡ‚ΡŒ сСмь ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² Π΄Π²ΡƒΡ… интСрфСйсах:

public interface MouseListener extends EventListener{

public void mouseClicked (MouseEvent e);

public void mousePressed (MouseEvent e) ;

public void mouseReleased (MouseEvent e);

public void mouseEntered (MouseEvent e);

public void mouseExited (MouseEvent e);

}

public interface MouseMotionListener extends EventListener{

public void mouseDragged (MouseEvent e);

public void mouseMoved (MouseEvent e);

}

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ курсора ΠΌΡ‹ΡˆΠΈ Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ e. getx (), e. getv (), ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ e. getPoint (), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌ экзСмпляр класса Point.

Π”Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ‰Π΅Π»Ρ‡ΠΎΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ e. getClickCount (), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌ количСство Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠ². ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΌΡ‹ΡˆΠΈ возвращаСтся 0.

Π£Π·Π½Π°Ρ‚ΡŒ, какая ΠΊΠ½ΠΎΠΏΠΊΠ° Π±Ρ‹Π»Π° Π½Π°ΠΆΠ°Ρ‚Π°, ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° e. getModifiers () класса inputEvent сравнСниСм со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ статичСскими константами класса inputEvent:

Β· BUTTON1_MASK — Π½Π°ΠΆΠ°Ρ‚Π° пСрвая ΠΊΠ½ΠΎΠΏΠΊΠ°, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ лСвая;

Β· BUTTON2_MASK — Π½Π°ΠΆΠ°Ρ‚Π° вторая ΠΊΠ½ΠΎΠΏΠΊΠ°, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ срСдняя, ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°ΠΆΠ°Ρ‚Ρ‹ ΠΎΠ±Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π½Π° Π΄Π²ΡƒΡ…ΠΊΠ½ΠΎΠΏΠΎΡ‡Π½ΠΎΠΉ ΠΌΡ‹ΡˆΠΈ;

Β· BUTTON3_MASK — Π½Π°ΠΆΠ°Ρ‚Π° Ρ‚Ρ€Π΅Ρ‚ΡŒΡ ΠΊΠ½ΠΎΠΏΠΊΠ°, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ правая.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° дСйствий ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ KeyEvent происходит Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ ΠΏΠΎ Π»ΡŽΠ±ΠΎΠΉ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½:

Β· Π½Π°ΠΆΠ°Ρ‚Π° клавиша — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ KEY_PRESSED;

Β· ΠΎΡ‚ΠΏΡƒΡ‰Π΅Π½Π° клавиша — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ KEY_RELEASED;

Β· Π²Π²Π΅Π΄Π΅Π½ символ — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ KEY_TYPED.

ПослСднСС событиС Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ символы вводятся Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… клавиш, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°Π³Π»Π°Π²Π½Ρ‹Π΅ Π±ΡƒΠΊΠ²Ρ‹ вводятся ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ клавиш +<οΏ½Π±ΡƒΠΊΠ²Π°>. ВспомнитС Π΅Ρ‰Π΅ <�Аlt>-Π²Π²ΠΎΠ΄ Π² MS Windows. НаТатиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… клавиш, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ событиС KEY_TYPED.

ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ эти события трСмя ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, описанными Π² ΠΈΠ½Ρ‚СрфСйсС:

public interface KeyListener extends EventListener{

public void keyTyped (KeyEvent e);

public void keyPressed (KeyEvent e);

public void keyReleased (KeyEvent e);

}

АргумСнт Π΅ ΡΡ‚ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ свСдСния.

ΠœΠ΅Ρ‚ΠΎΠ΄ e. getKeyChar () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ символ Unicode Ρ‚ΠΈΠΏΠ° char, связанный с ΠΊΠ»Π°Π²ΠΈΡˆΠ΅ΠΉ. Если с ΠΊΠ»Π°Π²ΠΈΡˆΠ΅ΠΉ Π½Π΅ ΡΠ²ΡΠ·Π°Π½ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ символ, Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ся константа CHAR_UNDEFINED.

ΠœΠ΅Ρ‚ΠΎΠ΄ e. getKeyCode () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ клавиши Π² Π²ΠΈΠ΄Π΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа Ρ‚ΠΈΠΏΠ° int. Π’ ΠΊΠ»Π°ΡΡΠ΅ KeyEvent ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΊΠΎΠ΄Ρ‹ всСх клавиш Π² Π²ΠΈΠ΄Π΅ констант, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠ΄Π°ΠΌΠΈ клавиш (virtual key codes), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, VK_FI, VK_SHIFT, VK_A, VK_B, VK_PLUS. Они пСрСчислСны Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊ ΠΊΠ»Π°ΡΡΡƒ KeyEvent. ЀактичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° зависит ΠΎΡ‚ ΡΠ·Ρ‹ΠΊΠ° ΠΈ Ρ€Π°ΡΠΊΠ»Π°Π΄ΠΊΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, какая клавиша Π±Ρ‹Π»Π° Π½Π°ΠΆΠ°Ρ‚Π°, Π½Π°Π΄ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getKeyCode () с ΡΡ‚ΠΈΠΌΠΈ константами. Если ΠΊΠΎΠ΄Π° клавиши Π½Π΅Ρ‚, ΠΊΠ°ΠΊ происходит ΠΏΡ€ΠΈ наступлСнии события KEY_TYPED, Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ VK_UNDEFINED.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Π½Π΅ Π½Π°ΠΆΠ°Ρ‚Π° Π»ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ нСсколько клавиш-ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², ,

,, Π½Π°Π΄ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ унаслСдованным ΠΎΡ‚ ΠΊΠ»Π°ΡΡΠ° inputEvent ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ getModifiers () ΠΈ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ с ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π°ΠΌΠΈ ALT_MASK, CTRL_MASK, META_MASK, SHIFT_MASK. Π”Ρ€ΡƒΠ³ΠΎΠΉ способ — ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ логичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ isAltDown (), isControlDown (), isMetaDown (), isShiftDown ().

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 4. Нити процСссов

Π Π°Π±ΠΎΡ‚Ρƒ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΠΉ систСмы ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΈ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ, Ссли Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ процСссам Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ адрСсном пространствС. Π’Π°ΠΊΠΈΠ΅ процСссы Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ threads. Π’ Ρ€ΡƒΡΡΠΊΠΎΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ этого слова. Π‘ΡƒΠΊΠ²Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ — «Π½ΠΈΡ‚ΡŒ». Часто пСрСводят thread ΠΊΠ°ΠΊ «ΠΏΠΎΡ‚ΠΎΠΊ» ΠΈΠ»ΠΈ «ΠΏΠΎΠ΄ΠΏΡ€ΠΎΡ†Π΅ΡΡ» .

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΈ — это Π΄Π΅Π»ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Π½ΠΎ Π² ΡΠ·Ρ‹ΠΊ Java Π²Π²Π΅Π΄Π΅Π½Ρ‹ срСдства для выполнСния этих дСйствий. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанныС Π½Π° Java, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π²ΠΎ Π²ΡΠ΅Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах, эти срСдства ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самыС ΠΎΠ±Ρ‰ΠΈΠ΅ дСйствия.

Когда опСрационная систСма запускаСт Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Java для выполнСния прилоТСния, ΠΎΠ½Π° создаСт ΠΎΠ΄ΠΈΠ½ процСсс с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Π“Π»Π°Π²Π½Ρ‹ΠΉ (main) ΠΏΠΎΡ‚ΠΎΠΊ выполняСт Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΎΠ½ ΡΡ€Π°Π·Ρƒ ΠΆΠ΅ обращаСтся ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ main () прилоТСния. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, способны ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈ Ρ‚. Π΄. Π“Π»Π°Π²Π½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π°ΠΏΠ»Π΅Ρ‚Π° являСтся ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π°ΠΏΠ»Π΅Ρ‚ выполняСтся. Π“Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ особой Ρ€ΠΎΠ»ΠΈ, просто ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅Ρ‚ся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ.

ΠŸΠΎΡ‚ΠΎΠΊ Π² Java создаСтся ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ся ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ класса Thread. ПослС создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° этого класса ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΅Π³ΠΎ конструкторов Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ запускаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ start ().

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ссылку Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ статичСским ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ

Thread.currentThread ();

Класс Thread Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Runnable. Π­Ρ‚ΠΎΡ‚ интСрфСйс описываСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ run (). Новый ΠΏΠΎΡ‚ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ записано Π² ΡΡ‚ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, класс Thread содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡƒΡΡ‚ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° run (), поэтому класс Thread Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся сам ΠΏΠΎ ΡΠ΅Π±Π΅, ΠΎΠ½ Π²ΡΠ΅Π³Π΄Π° Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ. ΠŸΡ€ΠΈ Π΅Π³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ run () пСрСопрСдСляСтся.

ΠœΠ΅Ρ‚ΠΎΠ΄ run () Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‚. ΠΊ. Π½Π΅ΠΊΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄. Он Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ значСния, Π΅Π³ΠΎ Π½Π΅ΠΊΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ. К ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ run () нСльзя ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, это всСгда дСлаСтся автоматичСски ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉ систСмой Java ΠΏΡ€ΠΈ запускС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ start ().

Π˜Ρ‚Π°ΠΊ, Π·Π°Π΄Π°Ρ‚ΡŒ дСйствия создаваСмого ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ двумя способами: Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ класс Thread ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс Runnable. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Thread для управлСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ примСняСтся Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Π½Π°Π΄ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ run (), ΠΈΠ»ΠΈ класс, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΡƒΠΆΠ΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ конструкторы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ содСрТит класс Thread.

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