Implements KeyListener
{
String s;
public static BufferedImage im;
pictureBox ()
{
addKeyListener(this);
s="";
try
{
im = ImageIO.read(new File("face1.jpg"));
}
catch (IOException e)
{
}
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = im.createGraphics();
g.drawImage(im, 0, 0, null);
g.drawString(s, 50, 30);
repaint();
}
public void keyPressed(KeyEvent ke)
{
}
public void keyReleased(KeyEvent ke)
{
}
public void keyTyped(KeyEvent ke) // ввод символа ke
{
s=s+ke.getKeyChar();
repaint();
}
}
keyPressed и keyReleased для работы с функциональными клавишами
пример
public void keyReleased(KeyEvent ke)
{
int k;
k=ke.getKeyCode();
if(k==KeyEvent.VK_F1)
s=s+”F1”;
}
на ME:
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class Prog_5_2 extends MIDlet
{
private Display dsp;
private MyCanvas cv;
public Prog_5_2()
{
cv= new MyCanvas();
}
public void startApp()
{
dsp=Display.getDisplay(this);
dsp.setCurrent(cv);
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
class MyCanvas extends Canvas
{
int key; // код символа
String s; // строка вывода
MyCanvas()
{
key=0;
s="";
}
protected void paint(Graphics g)
{
Image im = null;
try
{
im=Image.createImage("/Images/face1.jpg");
}
catch (Exception e)
{
}
g.drawImage(im, 10, 10, Graphics.LEFT | Graphics.TOP);
g.drawString(s, 20, 20,Graphics.LEFT | Graphics.TOP );
}
public void keyReleased (int keyCode)
{
key = keyCode;
s=s+(char)key;
repaint ();
}
}
}
3) Работа с таймером.
SE: (swing)
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.swing.Timer;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Prog_5_3
{
JFrame form;
pictureBox pc;
Timer tm; // таймер из swing
Prog_5_3()
{
form = new JFrame();
form.setSize (500,500);
form.setTitle ("лабораторная 5");
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(pc.r>60)
{
tm.stop(); // после 6 раза перестать рисовать
}
else
{
pc.r=pc.r+10;
pc.repaint();
}
}
}
);
form.show();
tm.start(); // старт работы таймера
}
public static void main (String args[])
{
Prog_5_3 f;
f= new Prog_5_3();
}
}
class pictureBox extends JPanel
{
int r; // радиус окружности
public static BufferedImage im;
pictureBox ()
{
r=10; // начальное значение радиуса
}
public void paintComponent(Graphics g)
{
g.drawOval(200,200, r, r);
repaint();
}
}
В java.util имеется Timer и TimerTask
import java.util.*;
class mytask extends TimerTask
{
public void run() // перегрузка метода для выполнения
{
// выполнение задания по таймеру
}
}
…
Timer tm;
mytask ts; // объект выполняемого задания
…
tm=new Timer();
tm.schedule(ts,1000,500); // через секунду, каждые полсекунды
……………………
на ME:
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import java.util.*;
public class Prog_5_3 extends MIDlet
{
private Display dsp;
private MyCanvas cv;
Timer tm;
myTimerTask ts;
public Prog_5_3()
{
cv= new MyCanvas();
}
public void startApp()
{
tm = new Timer();
ts=new myTimerTask();
tm.schedule(ts, 1000, 500); // через 1 сек, каждые 0,5 сек
dsp=Display.getDisplay(this);
dsp.setCurrent(cv);
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
class MyCanvas extends Canvas
{
int r; // радиус
MyCanvas()
{
r=20;
}
protected void paint(Graphics g)
{
g.setColor(255,0,255);
g.drawArc(100,100,r,r,0,360); // окружность
}
}
private class myTimerTask extends TimerTask // класс для выполнения
{
public void run() // перегрузка
{
if(cv.r>60)
{
tm.cancel();
}
else
{
cv.r=cv.r+10;
cv.repaint();
}
}
}
}
Задание 4б
Добавить к графическому изображению дорисовку отклика на мышь, в зависимости от координат курсора, отклика на клавиатуру, в зависимости от нажатых клавиш и движение по таймеру. Для SE запуск и остановку выполнить по нажатию button, для ME – создав в canvas 2 команды Start, Stop .
(см. this.addCommand( new Command("Back",Command.SCREEN,0)); лекция 4)
4) Таблицы
В C++ builder – StringGrid.
Пример работы с таблицей SE: