Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° JavaΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 59

Автор Н.А. Вязовик

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Ρ†Π΅Π½Ρ‚Ρ€ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° находится Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° – Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΎΡ‚ отрисовки ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΊ отрисовкС Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ Π² Π½Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ (пСрСнСсти) Ρ†Π΅Π½Ρ‚Ρ€ систСмы ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.

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

Π’ ΠΈΡ‚ΠΎΠ³Π΅ получаСтся Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр Graphics для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Для этого сущСствуСт ΠΌΠ΅Ρ‚ΠΎΠ΄ create, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ копию Graphics, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ( int x, int y, int width, int height ). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρƒ Π½ΠΎΠ²ΠΎΠ³ΠΎ Graphics Π±ΡƒΠ΄Π΅Ρ‚ смСщСн Ρ†Π΅Π½Ρ‚Ρ€ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π² Ρ‚ΠΎΡ‡ΠΊΡƒ ( x, y ), Π° clip -ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° пСрСсСчСниСм ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ограничитСля с ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ ( 0, 0, width, height ) (Π² Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°Ρ…). ΠœΠ΅Ρ‚ΠΎΠ΄ create создаСт копию Π±Π΅Π· измСнСния этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Π’Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ Π±Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° paint, Ссли Π² Π½Π΅ΠΌ описан слишком слоТный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. ПослС использования Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Graphics Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ – Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° dispose(). Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ отсчСта ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ translate (int x, int y).

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ своим ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ paint отрисовываСт сСбя ΠΈ всС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π² Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. Если ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΈΠ· Π½ΠΈΡ…, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, Ρ‚ΠΎ процСсс иСрархичСски продолТаСтся Π²Π³Π»ΡƒΠ±ΡŒ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ вСсь AWT интСрфСйс, ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ‹ слоТным ΠΎΠ½ Π½ΠΈ Π±Ρ‹Π», состоит ΠΈΠ· Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, отрисовка ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… начинаСтся с самого Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ ΠΏΠΎ вСтвям развиваСтся Π²Π³Π»ΡƒΠ±ΡŒ Π΄ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ интСрСс прСдставляСт этот самый Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это ΠΎΠΊΠ½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ для Java-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. ИмСнно опСрационная систСма ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ процСсс отрисовки, ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° сворачиваниС ΠΈ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π‘ΠΎ стороны Java для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠΊΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ класс Window, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся наслСдником Container ΠΈ рассматриваСтся Π½ΠΈΠΆΠ΅.

НаслСдники класса Component

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° рассмотрСны основныС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ классов Component ΠΈ Container, рассмотрим ΠΈΡ… наслСдников, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈ строится Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс.

НачнСм с наслСдников класса Component.

Класс Canvas

Класс Canvas являСтся ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌ наслСдником Component. Он Π½Π΅ добавляСт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС супСркласса для создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ нСстандартным внСшним Π²ΠΈΠ΄ΠΎΠΌ.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ опрСдСлСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sin(x):


public class SinCanvas extends Canvas {

public void paint(Graphics g) {

int height = getHeight(), width = getWidth();

// ВычисляСм ΠΌΠ°ΡΡˆΡ‚Π°Π± Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ,

// Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ всСгда ΡƒΠΌΠ΅Ρ‰Π°Π»ΠΎΡΡŒ

// 5 ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΠ²

double k=2*Math.PI*5/width;

int sy = calcY(0, width, height, k);

for (int i=1; i<width; i++) {

int nsy = calcY(i, width, height, k);

g.drawLine(i-1, sy, i, nsy);

sy=nsy;

}

}

// ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

// для отобраТСния Π½Π° экранС

private int calcY(int x, int width,

int height, double k) {

double dx = (x-width/2.)*k;

return (int)(height/2.*(1-Math.sin(dx)));

}

}


Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, достаточно лишь ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ paint. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚:



Класс Label

Как понятно ΠΈΠ· названия, этот ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ надпись. БоотвСтствСнно, ΠΈ Π΅Π³ΠΎ основной конструктор ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° String – тСкст надписи. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартных свойств класса Component – ΡˆΡ€ΠΈΡ„Ρ‚, Ρ†Π²Π΅Ρ‚, Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ – ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π²ΠΈΠ΄ надписи. ВСкст ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ послС создания Label с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° setText.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ этом ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ сам обновляСт свой Π²ΠΈΠ΄ Π½Π° экранС. Π’Π°ΠΊΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ всС стандартныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ AWT.

Класс Button

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ позволяСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² интСрфСйс стандартныС ΠΊΠ½ΠΎΠΏΠΊΠΈ. Основной конструктор ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° String – надпись Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅. Как ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ события, рассматриваСтся Π½ΠΈΠΆΠ΅.

ΠšΠ»Π°ΡΡΡ‹ Checkbox ΠΈ CheckboxGroup

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Checkbox ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° способа примСнСния.

Когда ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ сам ΠΏΠΎ сСбС, ΠΎΠ½ прСдставляСт checkbox – элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΡƒΠΆΠ½Π° доставка для оформляСмой ΠΏΠΎΠΊΡƒΠΏΠΊΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‚). Π’ этом случаС Π² конструктор пСрСдаСтся лишь тСкст – подпись ΠΊ checkbox.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π² Ρ‚Π΅Π»Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° добавляСтся Π΄Π²Π° checkbox:


Checkbox payment = new Checkbox("ΠžΠΏΠ»Π°Ρ‚Π° Π² ΠΊΡ€Π΅Π΄ΠΈΡ‚");

payment.setBounds(10, 10, 120, 20);

add(payment);

Checkbox delivery = new Checkbox("Доставка");

delivery.setBounds(10, 30, 120, 20);

add(delivery);

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ внСшний Π²ΠΈΠ΄ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°:



ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Checkbox Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ достаточным для размСщСния Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ поля для "Π³Π°Π»ΠΎΡ‡ΠΊΠΈ", Π½ΠΎ ΠΈ для подписи.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ примСнСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Checkbox ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ "ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ" ( radio buttons ). Π’ этом случаС нСсколько экзСмпляров ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² Π³Ρ€ΡƒΠΏΠΏΡƒ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ лишь ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½. Π’ Ρ€ΠΎΠ»ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ выступаСт класс CheckboxGroup. Он Π½Π΅ являСтся Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ отобраТаСтся Π½Π° экранС. Π•Π³ΠΎ Π·Π°Π΄Π°Ρ‡Π° – логичСски ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ нСсколько Checkbox. Π“Ρ€ΡƒΠΏΠΏΡƒ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² конструкторС:


CheckboxGroup delivery = new CheckboxGroup();

Checkbox fast = new Checkbox(

"Брочная (1 дСнь)", delivery, true);

fast.setBounds(10, 10, 150, 20);

add(fast);

Checkbox normal = new Checkbox(

"ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ (1 нСдСля)", delivery, false);

normal.setBounds(10, 30, 150, 20);

add(normal);

Checkbox postal = new Checkbox(

"По ΠΏΠΎΡ‡Ρ‚Π΅ (Π΄ΠΎ 1 мСсяца)", delivery, false);

postal.setBounds(10, 50, 150, 20);

add(postal);

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ внСшний Π²ΠΈΠ΄ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°:



Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ конструктора класса Checkbox ΠΏΠΎΠΌΠΈΠΌΠΎ тСкста подписи ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹, указываСтся состояниС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ (булСвский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ внСшнСго Π²ΠΈΠ΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° (Ρ„ΠΎΡ€ΠΌΠ° поля смСнилась с ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΉ Π½Π° ΠΊΡ€ΡƒΠ³Π»ΡƒΡŽ, ΠΊΠ°ΠΊ ΠΈ принято Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… GUI ).

ΠšΠ»Π°ΡΡΡ‹ Choice ΠΈ List

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Choice слуТит для Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² (Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ список). Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


Choice color = new Choice();

color.add("Π‘Π΅Π»Ρ‹ΠΉ");

color.add("Π—Π΅Π»Π΅Π½Ρ‹ΠΉ");

color.add("Π‘ΠΈΠ½ΠΈΠΉ");

color.add("Π§Π΅Ρ€Π½Ρ‹ΠΉ");

add(color);


Π’ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ состоянии ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Π’ процСссС Π²Ρ‹Π±ΠΎΡ€Π° отобраТаСтся вСсь Π½Π°Π±ΠΎΡ€ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². На рисункС прСдставлСн Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ список Π² ΠΎΠ±ΠΎΠΈΡ… состояниях:



ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Choice всСгда Π΅ΡΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ элСмСнт.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ List, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Choice, прСдоставляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΈΠ· списка ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ…. ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ List ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ сразу нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ задаСтся Π² конструкторС:


List accessories = new List(3);

accessories.add("Π§Π΅Ρ…ΠΎΠ»");

accessories.add("ΠΠ°ΡƒΡˆΠ½ΠΈΠΊΠΈ");

accessories.add("Аккумулятор");

accessories.add("Π‘Π»ΠΎΠΊ питания");

add(accessories);

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (вСрхняя Ρ‡Π°ΡΡ‚ΡŒ рисунка):



Π’ спискС находится 4 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°. Однако Π² конструктор Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ 3, поэтому Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 3 ΠΈΠ· Π½ΠΈΡ… Π²ΠΈΠ΄Π½Ρ‹ Π½Π° экранС. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹.

Рисунок ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ свойство List – Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ сразу нСсколько ΠΈΠ· ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². Для этого Π½Π°Π΄ΠΎ Π»ΠΈΠ±ΠΎ Π² конструкторС Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ булСвскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true ( false соотвСтствуСт Π²Ρ‹Π±ΠΎΡ€Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта), Π»ΠΈΠ±ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ setMultipleMode.

ΠšΠ»Π°ΡΡΡ‹ TextComponent, TextField, TextArea

Класс TextComponent являСтся наслСдником Component ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с тСкстом,– TextField ΠΈ TextArea.

TextField позволяСт Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ строку тСкста. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ содСрТимым этого поля Π²Π²ΠΎΠ΄Π°:


TextField tf = new TextField();

tf.setText("Enter your name");

tf.selectAll();

add(tf);

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ этот ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚:



Π’ ΠΊΠΎΠ΄Π΅ вторая строка устанавливаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ тСкста Π² ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° (ΠΌΠ΅Ρ‚ΠΎΠ΄ getText позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅). Π—Π°Ρ‚Π΅ΠΌ вСсь тСкст выдСляСтся (Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ тСкста).

Для любой тСкстовой ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ особый Ρ€Π΅ΠΆΠΈΠΌ. Π’ Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС Component ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ свойство enabled, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, Ссли выставлСно Π² false, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ события. Для тСкстовой ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ вводится Π½ΠΎΠ²ΠΎΠ΅ свойство – editable (ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ), ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌ – isEditable ΠΈ setEditable. Если тСкст нСльзя Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ доступСн, Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ, ΠΈΠ»ΠΈ вСсь тСкст, ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π±ΡƒΡ„Π΅Ρ€.

TextField ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ свойством. ВсС Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΏΠΎΠ»Π΅ΠΌ Π²Π²ΠΎΠ΄Π° для пароля – Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ символы Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ, вмСсто Π½ΠΈΡ… появляСтся ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ символ. Для TextField Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° setEchoChar (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, setEchoChar(' ') ).