Здравствуйте. Порой перед программистом стоит цель, написать
отображение часов с использованием изображений. В данном рассмотренном примере мы пытались доступно показать как это
реализовать средствами j2me CLDC 1.0 и MIDP 1.0. В программе используются изображения
при помощи Adobe Photoshop'а, в примере представлен полностью работоспособный
исходный код.
import javax.microedition.lcdui.Display; |
import javax.microedition.midlet.MIDlet; |
public class mainMidlet extends MIDlet { |
Display disp; |
public void startApp() { |
disp = Display.getDisplay(this); |
draw drawClock = new draw();// вызываем класс draw() отвечающий за отображение часов |
disp.setCurrent(drawClock); |
} |
public void pauseApp() {} |
public void destroyApp(boolean b) {} |
} |
Класс TimerCod
берет часы, минуты и секунды с телефона и присваивает их в int переменные:
import java.util.Calendar; |
public class TimerCod { |
public int hour; |
public int min; |
public int sec; |
public void time() { |
Calendar cal = Calendar.getInstance(); |
hour = cal.get(11);//часы |
min = cal.get(12);//минуты |
sec = cal.get(13);//секунды |
} |
} |
А вот и главный код отображающий и переводящий числа в
изображения:
import java.io.IOException; // Исключение вывода изображений |
import javax.microedition.lcdui.*; // Канва |
class draw extends Canvas implements Runnable { |
private boolean openclockThr = true; //булева для открытия потока |
private Image img[] = new Image[10]; //массив изображений цифр |
private Image displayIm; // картинка жк. дисплея |
private Image tochki; //картинка точек на дисплее |
private Thread thr = new Thread(this); // Поток отвечающий за работу часов |
private int hour, minu, secu; // Для принятия данных из класса TimerCod |
private int h_1 = 0, h_2 = 0, m_1, m_2, s_1 = 0, s_2 = 0; |
private TimerCod timer = new TimerCod(); // вызов класса TimerCod |
private String getSec_int_to_str = ""; // используется в методе translator() |
private String getHour_int_to_str = ""; // используется в методе translator() |
private String getMin_int_to_str = ""; // используется в методе translator() |
private String hour_str_1, hour_str_2, minute_str_1, // Стринги используемые в методе translator() |
minute_str_2, secunde_str_1, secunde_str_2; |
private char hour_array[] = new char[2]; // массив для принятия данных часов |
private char minute_array[] = new char[2]; // массив для принятия данных минут |
private char secunde_array[] = new char[2]; // массив для принятия данных секунд |
public draw() { |
timer.time(); // вызываем класс TimerCod и метод time() |
hour = timer.hour; //присваиваем часы |
minu = timer.min; //присваиваем минуты |
secu = timer.sec; //присваиваем секунды |
for (int i = 0; i <= 9; i++) { |
try { |
img[i] = Image.createImage("/num/" + i + ".PNG"); //Грузим картинки цифр для часов |
} catch (IOException ex) { |
System.out.println("Image not loading"); |
} |
} |
try { |
displayIm = Image.createImage("/num/display.PNG"); //берем картинкм из папки |
tochki = Image.createImage("/num/tochki.PNG"); |
} catch (IOException ex1) { |
System.out.println("Image not loading"); |
} |
thr.start(); // Стартуем поток отвесающий за обновления часов |
} |
public void translator() { //Главный метод отвечающий за изменение изменение времени |
if (secu < 59) { // Ставим ограничение на секунды |
secu++; |
} else { |
secu = 0; |
if (minu < 59) { // Ставим ограничение на минуты |
minu += 1; |
} else { |
minu = 0; |
if (hour < 23) { // Ставим ограничение на часы |
hour++; |
} else { // в противном случае на все int переменые ставим значение 0 |
hour = 0; |
minu = 0; |
secu = 0; |
} |
} |
} |
getHour_int_to_str = String.valueOf(hour); //Переводим int hour в string |
getMin_int_to_str = String.valueOf(minu); //Переводим int minu в string |
getSec_int_to_str = String.valueOf(secu); //Переводим int secu в string |
//-------------------------------------------------------------------------- |
if (getHour_int_to_str.length() <= 1) { // Проверяем длину строки часов, так если часы, минуты, секуды меньше 10 часов то телефон дает однозначное значение |
h_1 = 0; // Эта переменная пригодится для прорисовки цифр, отвечающая за вывод первой картинки часов |
h_2 = hour; //переменная пригодится для прорисовки второй картинки часов |
} else { |
hour_array[0] = getHour_int_to_str.charAt(0); // берем из строки символ под индексом 0 и ложим в массив hour_array |
hour_array[1] = getHour_int_to_str.charAt(1); // берем из строки символ под индексом 1 и ложим в массив hour_array |
hour_str_1 = String.valueOf(hour_array[0]); // В следующую переменную строки засовываем символ под индексом 0 из массива hour_array |
hour_str_2 = String.valueOf(hour_array[1]); // далее засовываем символ под индексом 1 из массива hour_array |
h_1 = Integer.parseInt(hour_str_1); // В int h_1 переводим строку hour_str_1(далее h_1 исполдьзуется в методе paint()) |
h_2 = Integer.parseInt(hour_str_2); // Эта соответсвенно также как у предыдущая переменная |
} |
//-------------------------------------------------------------------------- |
if (getMin_int_to_str.length() <= 1) { // Проверяем длину строки минут, так если часы, минуты, секуды меньше 10 часов то телефон дает однозначное значение |
m_1 = 0; // Эта переменная пригодится для прорисовки цифр, отвечающая за вывод первой картинки минут |
m_2 = minu; //переменная пригодится для прорисовки второй картинки минут |
} else { |
minute_array[0] = getMin_int_to_str.charAt(0); // берем из строки символ под индексом 0 и ложим в массив minute_array |
minute_array[1] = getMin_int_to_str.charAt(1); // берем из строки символ под индексом 1 и ложим в массив minute_array |
minute_str_1 = String.valueOf(minute_array[0]); // В следующую переменную строки засовываем символ под индексом 0 из массива minute_array |
minute_str_2 = String.valueOf(minute_array[1]); // далее засовываем символ под индексом 1 из массива minute_array |
m_1 = Integer.parseInt(minute_str_1); // В int m_1 переводим строку minute_str_1(далее m_1 исполдьзуется в методе paint()) |
m_2 = Integer.parseInt(minute_str_2); // Эта соответсвенно также как у предыдущая переменная |
} |
//-------------------------------------------------------------------------- |
if (getSec_int_to_str.length() <= 1) { // Проверяем длину строки секунд, так если часы, минуты, секуды меньше 10 часов то телефон дает однозначное значение |
s_1 = 0; // Эта переменная пригодится для прорисовки цифр, отвечающая за вывод первой картинки секунд |
s_2 = secu; //переменная пригодится для прорисовки второй картинки секунд |
} else { |
secunde_array[0] = getSec_int_to_str.charAt(0); // берем из строки символ под индексом 0 и ложим в массив secunde_array |
secunde_array[1] = getSec_int_to_str.charAt(1); // берем из строки символ под индексом 1 и ложим в массив secunde_array |
secunde_str_1 = String.valueOf(secunde_array[0]); // В следующую переменную строки засовываем символ под индексом 0 из массива secunde_array |
secunde_str_2 = String.valueOf(secunde_array[1]); // далее засовываем символ под индексом 1 из массива secunde_array |
s_1 = Integer.parseInt(secunde_str_1); // В int s_1 переводим строку secunde_str_1(далее s_1 исполдьзуется в методе paint()) |
s_2 = Integer.parseInt(secunde_str_2); // Эта соответсвенно также как у предыдущая переменная |
} |
//-------------------------------------------------------------------------- |
repaint(); // идем в метод paint(); |
} |
public void paint(Graphics g) { |
g.setColor(255, 255, 255); // Цвет для заливки заднего фона |
g.fillRect(0, 0, g.getClipWidth(), g.getClipHeight()); // Заливаем область экрана белым цветом |
g.drawImage(displayIm, 10, 10, 0); // отображаем жк |
g.drawImage(img[h_1], 20, 15, 0); // часы 1-ую цифру |
g.drawImage(img[h_2], 30, 15, 0); // часы 2-ую цифру |
g.drawImage(img[m_1], 50, 15, 0); // минуты 1-ую цифру |
g.drawImage(img[m_2], 60, 15, 0); // минуты 2-ую цифру |
g.drawImage(img[s_1], 80, 15, 0); // секунды 1-ую цифру |
g.drawImage(img[s_2], 90, 15, 0); // секунды 2-ую цифру |
g.drawImage(tochki, 40, 15, 0); // точки между часами и минутами |
g.drawImage(tochki, 70, 15, 0); //точки между минутами и секундами |
} |
public void run() { |
while (openclockThr == true) { |
try { |
Thread.sleep(1000); // Раз в секунду вызываем метод translator() |
translator(); // Вызываем метод "переводчик" |
} catch (InterruptedException ex) { |
} |
} |
} |
} |
В конструкторе класса draw идет загрузка изображений из папки
находящейся в jar архиве.
Заключение
В этой статье была рассмотрена технология создания графических часов с
использованием стандартных средств j2me.
Файлы
Clock.jad (0,2 Кб) Clock.jar (42,6 Кб)