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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° J2MeΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 30

Автор Автор нСизвСстСн

private GraphicsDemo gDemo = GraphicsDemo.getlnstance();

private Display display = Display.getDisplay (gDerno);

// Бсылка Π½Π° Image, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Image image;

// ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ для опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, осущСствляСт

// Π»ΠΈ рСализация Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ.

// ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«trueΒ», Ссли рСализация осущСствляСт

// Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ,

Β«falseΒ» Π² ΠΈΠ½ΠΎΠΌ случаС, private boolean autoDoubleBuffered = true;

/**


ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ No-arg.


*/

public DoubleBufferlmageDemo()

{

super();

if (!isDoubleBuffered())

{

autoDoubleBuffered = false;

}

// Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ PNG. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ «нарисовано» Π²

// измСняСмом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Image, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ свой собствСнный

// внСэкранный Graphics. ΠœΡ‹ сСйчас создаСм ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²

// конструкторС, вмСсто ΠΌΠ΅Ρ‚ΠΎΠ΄Π° paint (),

//Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ создаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. try

}

image = Image.createlraage("/bottle80x80.png");

}

catch (lOException ioe)

{

System.out.println(ioe.getMessage()); ioe.printStackTrace();

}

addCommand(back); setCommandListener(this); display.setCurrent (this);

}

protected void paintClipRect(Graphics g)

{

int clipX = g.getClipX{};

int clipY = g.getClipY ();

int clipH = g.getClipHeight();

int clipW = g.getClipWidth ();

int color = g.getColor();

g. setColor(WHITE);

g. fillRecc(clipX, clipY, clipW, clipH);

g. setColor (color);

/**


РисуСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π²ΠΈΠ΄ΠΈΠΌΠΎΠΌ Canvas этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.


*/ public void paint(Graphics g)

Graphics originalG = null; int width = getWidth ();

int height = getHeight ();

if (image == null)

{

return; 1

// ΠœΡ‹ всС Ρ€Π°Π²Π½ΠΎ нуТдаСмся Π² Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

// рисования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‡ΠΈΡ‰Π°ΡŽΡ‚ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ Canvas, if (!autoDoubleBuffered)

{

// БохраняСт ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ графичСский контСкст ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚

// внСэкранный Graphics ΠΈΠ· Image для очистки отсСкаСмого

// ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°. originalG = g; g = image.getGraphics ();

paintClipRect (g);

}

else 1

// НарисуйтС Ρ„ΠΎΠ½ с ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Graphics, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ Π² Π½Π΅Π³ΠΎ. paintClipRect(g);

{

// Нам Π½Π΅ Π½ΡƒΠΆΠ½Π° двойная буфСризация Π²Ρ‹Π·ΠΎΠ²Π° отобраТСния Image.

// Π’Ρ‹Π·ΠΎΠ² этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° рисуСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎ

// внСэкранном Graphics ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Image, копируя Π·Π°Ρ‚Π΅ΠΌ Π΅Π³ΠΎ

// содСрТимоС Π² контСкст Graphics устройства нСявно.

g. drawlmage(image, 0, 0, Graphics.TOP I Graphics.LEFT);

public void commandAction(Command c, Displayable d)

{

if (c == back)

GraphicsDemo.getInstance(). display!);

}

}

}


ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° довольно прямолинСйна. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сначала ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ изобраТСния, Ρ‡Ρ‚ΠΎ Π²Ρ‹ сдСлали, ΠΊΠΎΠ³Π΄Π° пСрСслали ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ высокоуровнСвого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса MIDP. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Image.createlmage(String name) для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Image. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ опрСдСляСт мСстополоТСниС Ρ„Π°ΠΉΠ»Π° изобраТСния, Ρ‡ΡŒΠ΅ имя ΠΏΡƒΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ res/ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ пСрСсылаСтС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Graphics, указывая Ρ‚ΠΎΡ‡ΠΊΡƒ привязки ΠΈ мСстополоТСниС (Ρ…, Ρƒ) Ρ‚ΠΎΡ‡ΠΊΠΈ привязки. ПослС этого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° просто Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Graphics.drawlmage() для отобраТСния изобраТСния. РСализация MIDP пСрСсылаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Graphics Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ прилоТСния paint (Graphics g). Он прСдставляСт физичСский графичСский контСкст устройства. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Graphics.drawlmage() Π² контСкстС Graphics, пСрСсланного Π² ваш ΠΌΠ΅Ρ‚ΠΎΠ΄ Canvas, paint (Graphics g), выраТаСтся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π² Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° дисплСС устройства.

Класс Image ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ вСрсии ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° createlmage(). Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 6.7 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ всС Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ вСрсии. Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, эта вСрсия СдинствСнная, которая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ измСняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ изобраТСния. Π­Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для записи Π²ΠΎ внСэкранном контСкстС Graphics ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Image.


Π’Π°Π±Π»ΠΈΡ†Π° 6.7. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Image для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ


НазваниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° изобраТСния β€” ОписаниС

static Image createlmage (byte [] imageData, int imageOffset, int imageLength) β€” Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ измСняСмоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… изобраТСния, бСря изобраТСния начиная с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… смСщСния ΠΈ Π΄Π»ΠΈΠ½Ρ‹

static Image createlmage (Image source) β€” Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ копию ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ изобраТСния

static Image createlmage (int width, int height) β€” Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ΅ измСняСмоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ ΠΈ Π΄Π»ΠΈΠ½ΠΎΠΉ

static Image createlmage (String name) β€” Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ измСняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ изобраТСния ΠΈΠ· изобраТСния с ΠΏΡƒΡ‚Π΅ΠΌ ΠΊ рСсурсам, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π² Ρ„Π°ΠΉΠ»Π΅ JAR Π½Π°Π±ΠΎΡ€Π° МID-Π»Π΅Ρ‚ΠΎΠ²


Π”Ρ€ΡƒΠ³ΠΈΠ΅ вСрсии ΡΠΎΠ·Π΄Π°ΡŽΡ‚ измСняСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Image. КаТдая вСрсия Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… источников. ΠŸΠ΅Ρ€Π²Π°Ρ вСрсия создаСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Вторая создаСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° изобраТСния. ЧСтвСртая вСрсия Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° JAR Π½Π°Π±ΠΎΡ€Π° MID-Π»Π΅Ρ‚ΠΎΠ². Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ имя Ρ„Π°ΠΉΠ»Π° рСсурса Π² Ρ„Π°ΠΉΠ»Π΅ JAR.

Π’ листингС 6.10 дСмонстрируСтся ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ изобраТСния PNG. ВмСсто рисования ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ β€” рисунков, хранящихся ΠΊΠ°ΠΊ изобраТСния Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ PNG, β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Β«ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒΒ», ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ смоТСтС ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ графичСского рисования, прСдоставляСмых Π² классС Graphics. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ гСомСтричСскиС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ пиксСли, Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ части дисплСя ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ β€” рисунок β€” ΠΏΠΎ, своСму ТСланию.

Двойная буфСризация ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π°ΡŽΡ‚ΡΡ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ нСявно. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ придСтся ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€, описанный Π² листингС 6.10, раскрываСт ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ этого.

ΠœΠ΅Ρ‚ΠΎΠ΄ paint () создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Image ΠΈΠ· Ρ„Π°ΠΉΠ»Π° рСсурса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ PNG для отобраТСния. Но этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Image ΡƒΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ связанный с Π½ΠΈΠΌ контСкст Graphics, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ внСэкранным Graphics. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ paint () выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΎΠ½ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ содСрТимоС контСкста Graphics ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Image β€” фактичСскиС Π±ΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, β€” Π² графичСский контСкст дисплСя:

g. drawlmage (image, О, О, Graphics.TOP I Graphics.LEFT);

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, двойная буфСризация ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ осущСствляСтся автоматичСски.

Π₯отя ΠΏΡ€ΠΈ рисовании изобраТСния двойная буфСризация осущСствляСтся автоматичСски, очистка отсСкаСмого ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ рисованиС Ρ„ΠΎΠ½Π° Canvas, β€” Π½Π΅Ρ‚. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Π΅Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ paint (Graphics Π΄)Π² листингС 6.10, ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ всС Π΅Ρ‰Π΅ провСряСт, Π½Π΅ осущСствляСт Π»ΠΈ рСализация Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ. Если Π½Π΅Ρ‚, ΠΌΠ΅Ρ‚ΠΎΠ΄ paint (Graphics g) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ внСэкранный графичСский контСкст для очистки отсСкаСмого ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°.

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ отличаСтся ΠΎΡ‚ ΠΊΠΎΠ΄Π°, описанного Π² листингС 6.9, Π² этом ΠΊΠΎΠ΄Π΅ Π½Π΅Ρ‚ явной ссылки Π½Π° внСэкранный Graphics. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этого Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Image ΡƒΠΆΠ΅ прСдоставил Π²Π½Π΅ΡΠΊΡ€Π°Π½Π½ΡƒΡŽ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ. ΠœΠ΅Ρ‚ΠΎΠ΄ paint (Graphics g) ΠΌΠΎΠΆΠ΅Ρ‚ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ ΠΊΠ°ΠΊ внСэкранный Graphics, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для очистки отсСкаСмого ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°.


Π’Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΏΠΎ Π³Π»Π°Π²Π΅

Π”Π²Π° класса Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ javax.microedition.lcdui Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ интСрфСйса прилоТСния Π² MIDP: класс Graphics ΠΈ класс Canvas. НизкоуровнСвый API MIDP Π΄Π°Π΅Ρ‚ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ событиях Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСдоступны для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² высокоуровнСвого ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ интСрфСйса прилоТСния. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Canvas ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ событиях наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈΠ»ΠΈ двиТСния указатСля. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Canvas ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Displayable. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΎΠ½ΠΈ всС Π΅Ρ‰Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠ°ΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Displayable.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ API, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ подкласс Canvas. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ paint (Graphics g) Π² вашСм подклассС, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ внСшний Π²ΠΈΠ΄ Π΅Π³ΠΎ экзСмпляров. ΠœΠ΅Ρ‚ΠΎΠ΄ подкласса paint (Graphics g) опрСдСляСт этот Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ внСшний Π²ΠΈΠ΄.

ΠœΠ΅Ρ‚ΠΎΠ΄ paint (Graphics g) рисуСт внСшний Π²ΠΈΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Canvas с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ графичСского контСкста, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ классом Graphics. Класс Graphics ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ рисованиС ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… гСомСтричСских Ρ„ΠΈΠ³ΡƒΡ€, Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ Π»ΠΈΠ½ΠΈΠΈ, Π΄ΡƒΠ³ΠΈ, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, тСкст ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ рисованиС Π² Ρ†Π²Π΅Ρ‚Π΅. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌΠΈ свойствами ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Ρ‹Π±ΠΎΡ€ ΡˆΡ€ΠΈΡ„Ρ‚Π° для рисования тСкста, отсСчСниС ΠΈ пСрСнос Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Graphics.

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

Двойная буфСризация β€” это тСхнология, которая ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ рисования Π½Π° рСсурсно ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… устройствах. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Π²Π° графичСских контСкста. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ сначала рисуСт Π²ΠΎ внСэкранном Π±ΡƒΡ„Π΅Ρ€Π΅, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ содСрТимоС этого Π±ΡƒΡ„Π΅Ρ€Π° Π² Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ срСду, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с дисплССм устройства, формируя ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ внСшнСго Π²ΠΈΠ΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Canvas. ΠŸΡ€ΠΈ рисовании ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ двойная буфСризация осущСствляСтся автоматичСски.

Π“Π»Π°Π²Π° 7. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° постоянного хранСния Π² MIDP

Π Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ прилоТСния ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сохранСны ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎΠ·ΠΆΠ΅ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. Π’ этой Π³Π»Π°Π²Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свойство постоянного хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ интСрфСйса прилоТСния MIDP.