Пример. Связь Canvas и Form.

 

На форме (не Lwuit) создается текстовое поле, в котором

вводится число 1, 2, 3. При выборе команды Start происходит

переключение дисплея от form к canvas и в зависимости от числа

рисуется круг, прямоугольник или закрашенный прямоугольник.

В canvas имеется команда Back, возвращающая форму.

 

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class lab10 extends MIDlet

implements CommandListener // подключение команд

{

private Display dsp;

private Form form;

private TextField tf1; // обычное текстовое поле не lwuit

private Command cm ; // команда перехода изображения в Canvas

private MyCanvas cv; // MyCanvas наследник Canvas

public lab10()

{

form = new Form("Лабораторная 11");

tf1 = new TextField(null, "", 1, TextField.ANY );

// “” - исходный текст, 1-макс.кол. символов ANY-любые символы

cm = new Command("Draw", Command.SCREEN, 0);

// имя кманды Draw, вывод на текущий экран, приоритет 0

form.append(tf1);

form.addCommand(cm);

form.setCommandListener(this); // прослушивание команды

cv= new MyCanvas(); // объект класса MyCanvas

}

public void commandAction(Command c, Displayable s)

{

dsp.setCurrent(cv); // нажатие Draw переход к Canvas

}

public void startApp()

{

dsp=Display.getDisplay(this);

dsp.setCurrent(form); // при загрузке приложения включена form

}

public void pauseApp()

{

}

public void destroyApp(boolean unconditional)

{

}

class MyCanvas extends Canvas

implements CommandListener

{

MyCanvas()

{

this.addCommand( new Command("Back", Command.SCREEN, 0 ) );

// имя команды в canvas Back

this.setCommandListener(this);

}

protected void paint(Graphics g)

{

String s;

s=tf1.getString();

g.setColor(0, 200, 200);

if(s.charAt(0) =='1') // что в текстовом поле

g.drawArc(10, 20, 50, 50,0,360);

if(s.charAt(0) =='2') // что в текстовом поле

g.drawRect(10, 20, 70, 50);

if(s.charAt(0) =='3') // что в текстовом поле

g.fillRect(10, 20, 70, 50);

}

public void commandAction( Command c, Displayable d)

{

dsp.setCurrent(form); // изображение form

tf1.setString(""); // очистка текстового поля

}

}

}

 

 

 

5)Использование таймера в Visual C++.

 

 

 

 

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e)

{

timer1->Interval=500; // через каждые 0,5 сек переход на процедуру timer1_Tick

Work(); // начало работы

}

....................

начало программы

 

Form1(void)

{

InitializeComponent();

//

//TODO: добавьте код конструктора

//

}

int Radius; // радиус круга рисования

Bitmap^ bmp;

Graphics^ g;

Pen ^ p;

void Work()

{

int R,G,B;

Color cl;

bmp = gcnew Bitmap(400,230);

g = Graphics::FromImage(bmp);

pictureBox1->Image = bmp;

R=250;

G=100;

B=150;

cl = System::Drawing::Color::FromArgb(R,G,B);

p=gcnew Pen(cl);

Radius=15; // начальный радиус

timer1->Enabled=true; // запуск таймера

}

.....

 

private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e)

{

g->DrawArc(p,100,50,Radius,Radius,0,360); // через 0,5

pictureBox1->Refresh();

Radius=Radius+10;

if(Radius>75)

timer1->Enabled=false; // останов таймера при превышении радиуса

}

 

 

 

5)Использование таймера в Java SE.

 

 

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

 

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.Timer;

 

public class lab10

{

JFrame form;

pictureBox pc;

int Radius;

Timer tm; // таймериз swing

lab10()

{

form = new JFrame();

form.setBounds (10,20,500,500);

form.setTitle ("лабораторная 11");

form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

form.setLayout(null);

pc=new pictureBox();

pc.setBounds(0, 0, 300, 300);

form.add(pc);

tm=new Timer( 500, new ActionListener() // через 0,5 сек

{

public void actionPerformed(ActionEvent e) // вызывается через каждые 0,5 сек

{

if(Radius>75)

{

tm.stop();

}

else

{

Radius=Radius+15;

pc.repaint();

}

}

}

);

form.show();

Radius=0;

tm.start(); // старт таймера

}

public static void main (String args[])

{

lab10 f;

f= new lab10();

}

class pictureBox extends JPanel // наследникот JPanel

{

public pictureBox ()

{

 

}

public void paintComponent(Graphics g) // рисование

{

Color c=new Color(10,200,150);

Graphics2D g2d = (Graphics2D) g;

g2d.setColor(c);

g2d.drawOval(100, 100, Radius, Radius);

 

}

}

}