рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Введение в Java

Введение в Java - раздел Программирование, Введение В Java ...

Введение в Java

Что такое Java и как она работает?

Если кратко, то Java - это один из языков программирования. Он разработан компанией Sun, и является платформо-независимым. Это означает, что…   Существует два основных вида программ на Java - собственно Java-программы и апплеты. Первые выполняются как…

Что такое JDK и как его установить?

JDK расшифровывается как Java Developer Kit. Это набор программ и утилит, предназначенный для программирования на Java. В него ряд утилит. Вот… Компилятор javac. Именно он и переводит текст программы на Java в байт-коды… Интерпретатор java. Вы с его помощью будете запускать откомпилированные в байт-коды программы. Он содержит в себе JVM…

Категории программ Java

● Апплет (applet) – специализированная программа, работающая в окне WWW-документа под управлением браузера. ● Сервлет (servlet) - специализированная программа, работающая в WWW на… ● Модуль EJB (Enterprise JavaBeans) – предназначен для многократного использования серверными

SDK - Software Development Kit

● Java ME– комплект Java Micro Edition, предназначенный для программирования “тонких клиентов”. ● Java SE– комплект Java Standard Edition, предназначенный для… ● Java EE– комплект Java Enterprise Edition, предназначенный для написания серверного программного…

Первая программа на Java

Первая программа, по давно укоренившейся традиции, будет HelloWorld. Ниже приводится ее текст, который надо набрать в любом текстовом редакторе,… class HelloWorld{ public static void main(String [] args){

Числовые типы данных

Числовые типы данных Java перечислены в следующей таблице: Тип Описание Количество байтов int целый …   Объявление переменных происходит следующим образом:

Логический тип

Переменные логического типа могут принимать значение или true (истина), или false (ложь). Сразу обратите внимание, что нельзя вместо true и false…   Для переменных логического типа существуют операции & (и), && (и), | (или), || (или), ! (не), ^…

Операторы ветвления

 

Операторов ветвления в Java два - if и switch. Первый позволяет пойти программе по одному из двух направлений, второй позволяет сделать выбор между большим числом вариантов (два, три, четыре, ...).

 

Вот пример программы, которая выводит результат деления одного числа на другое. Если знаменатель равен нулю, то деления не происходит.

int a=30, b=5;

System.out.println("a="+a);

System.out.println("b="+b);

 

if (b!=0)

{

System.out.println(a/b);

}

else

{

System.out.println("На ноль делить нельзя!!!!");

}

 

Веточка else не обязательна. Если после проверки условия должен выполниться только один оператор, то фигурные скобки писать не обязательно.

 

Теперь пример с оператором switch. Пример смотрит, что за символ хранится в переменной ch (+, -, * или /), и в зависимости от этого делает то или иное действие с двумя числами. Результат действия выводится на экран.

char ch='/';

int k=40, n=10;

switch(ch)

{

case '+':

System.out.println(k+n);

break;

case '-':

System.out.println(k-n);

break;

case '*':

System.out.println(k*n);

break;

case '/':

System.out.println(k/n);

break;

default:

System.out.println("Error!");

}

 

Обратите внимание на break. Без него выполнялись бы операторы и в следующем case (пока не встретится break). Например, если написать так:

...

case 1:

case 2:

//Некоторые операторы

...

 

то "Некоторые операторы" будут выполнятся и когда проверяемая переменная в switch'е равна 1, и когда она равна 2.

 

Ветка default будет выполняться тогда, когда переменная в switch'е не равна ни одному значению в case'ах. Ее использование не обязательно. Если по задаче она не нужно, то не пишите ее.

 

Операторы циклов

 

Циклов в Java три вида - while, do-while и for. Первые два следует использовать тогда, когда точно неизвестно, сколько раз цикл должен выполнится. Цикл for используем тогда, когда число, которое наш код должен повторяться, известно.

 

Вот пример на цикл while:

int n=46;

int k=0;

while (k*k<=n)

{

k++;

}

 

В этом примере ищется такое минимальное k, что его квадрат больше n.

 

Цикл while и его брат цикл do-while выполняются до тех пор, пока условие в круглых скобочках истинно. Как только оно становится равным false, выполнение цикла прекращается.

 

Пример цикла do-while:

double k;

do

{

k=Math.random();

}while(k>0.1);

System.out.println(k);

 

В этом примере ищется первое случайное число меньшее 0.1. Как только оно сгенерировано датчиком случайных чисел Math.random(), выполнение цикла прекращается. Math.random() выдает случайные числа от 0 до 1.

 

Основное отличие циклов while и do-while в том, что while может вообще ни разу не выполнится (если условие в круглых скобочках сразу false), а do-while выполнится по крайней мере 1 раз.

 

Заметьте, что для циклов while и do-while где-то внутри цикла обязательно должна меняться переменная, стоящая в круглых скобочках после while. Иначе цикл может стать бесконечным.

 

И, наконец, пример цикла for:

for (int i=0; i<10; i++)

{

System.out.println(i*i);

}

 

Этот цикл распечатает квадраты целых чисел от 0 до 9. Обратите внимание, что переменная i объявлена прямо внутри цикла. Так часто и делается, так как чаще всего переменная-счетчик цикла вне его не нужна и не используется.

 

Массивы

Начнем сразу с примеров. Вот пример, в котором мы заводим массив из 3-х целых чисел, в каждое из которых мы записываем случайное целое число от 0 до… class Test{ public static void main(String [] args)

Начинаем изучать классы

 

С классом мы уже столкнулись ранее. И это не случайно - без классов на Java нельзя обойтись даже в самой простой программе. На этом же занятии и на нескольких следующих мы с вами и будем изучать классы и все, что с ними связано - наследование, конструкторы, виртуальные функции и другие мудреные вещи.

 

Давайте создадим новую программу. Вот ее текст:

class worker

{

private int Age;

public String Name;

public void setAge(int newAge)

{

if(newAge>=0)

Age=newAge;

else

Age=0;

}

public int getAge()

{

return Age;

}

}

class Test{

public static void main(String [] args){

worker wrk=new worker();

wrk.setAge(23);

wrk.Name="Ivan";

System.out.println(wrk.getAge() + "n" + wrk.Name);

}

}

 

Сохраните эту программу в файле Test.java и откомпилируйте. При запуске наша программа должны выдать две строчки: 23 и Ivan.

 

Что мы в нашей программе делаем? Сначала мы определяем класс worker. Делается это с помощью ключевого слова class:

class worker

{

...

}

 

В классе мы определяем две переменные - Age для возраста и Name для имени. Кроме типа переменных (int и String) мы используем еще модификаторы доступа - private (означает, что наша переменная не будет видна снаружи класса) и public (с наружи класса доступ есть). Раз переменную Age мы объявили как private, то пишем два метода в нашем классе: setAge для чтения возраста и getAge - для записи. Эти методы мы объявляем с модификатором public, это значит, что мы сможем их вызывать снаружи класса. Метод getAge просто возвращает наш возраст, а метод setAge делает небольшую проверку, и записывает в Age только положительный возраст или нуль в противном случае. Если вы раньше программировали на C++, то обратите внимание, во-первых, что модификаторы доступа ставятся перед каждой переменной и перед каждым методом и во-вторых, что после закрывающей фигурной скобки класса точку с запятой ставить не надо.

 

Класс Test служит для испытания класса worker. В нем мы заводим экземпляр нашего класса:

...

worker wrk=new worker();

 

Это мы делаем за два этапа - сначала заводим переменную типа worker (которая является ссылкой на объект), и затем определяем сам объект (с помощью оператора new).

 

После создания объекта мы можем вызывать его методы, обращаться к открытым переменным и т. п. Это мы и делаем в строчках

...

wrk.setAge(23);

wrk.Name="Ivan";

System.out.println(wrk.getAge() + "n" + wrk.Name);

...

 

Наследование классов

 

Классы можно писать не с нуля, а взяв за основу существующий класс. В этом случае эти классы будут является потомком и предком друг для друга. Потомка еще называют подклассом (subclass), а предка - суперклассом (superclass). Еще одна пара названий для таких классов - это класс-потомок и класс-предок.

 

Если один класс есть потомок другого, то он автоматически умеет делать все то, что умеет делать класс-предок. И нам остается только добавить в него то, чего не было в предке или изменить те методы, работа которых в классе-предке нас не удовлетворяет. В этом одна из главных черт Объектно-ориентированного программирования - если у некоторых объектов есть много общего, то можно для них создать класс-предок, в который записать все общие черты. Отличительные же черты будут реализованы в классах-потомках.

 

Давайте создадим класс boss, который будет потомком для класса worker из программы выше. Вот текст, который введите с том же файле Test.java, в котором находится класс worker:

class worker

{

...

}

class boss extends worker

{

public int NumOfWorkers; //Количество подчиненных

}

 

Ключевое слово extends означает, что наш новый класс boss есть потомок класса worker. Мы добавили в него только переменную NumOfWorkers, в которой будет храниться количество подчиненных. Класс же Test измените следующим образом:

...

public static void main(String [] args){

boss bigBoss=new boss();

bigBoss.setAge(41);

bigBoss.Name="Ivan Ivanov";

bigBoss.NumOfWorkers=100;

System.out.println(bigBoss.NumOfWorkers + "n" + bigBoss.Name);

...

 

Как вы видите, кроме количества подчиненных для нашего bigBoss мы можем задавать имя и возраст. Они берутся из родительского класса. Все работает, как и ожидалось.

 

Конструкторы классов

 

Конструкторы предназначены для задания некоторых стандартных значений для переменных-членов класса. Конструктор - это тот же метод класса, только обладающий некоторым количеством особенностей. Раз это метод, значит мы должны после его имени писать круглые скобки, в которых мы можем писать или не писать параметры и т. п. Но есть и несколько черт, отличающих конструктор от других методов класса. Вот они:

 

Конструктор всегда называется так же, как и класс (т. е. если класс, скажем, называется worker, то и контруктор будет называться worker).

 

Конструктор в отличие от других методов вызывается сам в момент создания экземпляра класса.

 

Конструктор не возвращает никакого значения. Это значит, что если перед любым другим методом мы пишем тип возвращаемого значения (int, float и т. п.), то перед конструктором ничего писать не надо (void тоже писать не надо).

 

Приведем пример конструкторов для класса worker:

class worker

{

private int Age;

public String Name;

//Конструктор без параметров

public worker()

{

Age=20;

}

//Конструктор с параметрами

public worker(int newAge, String newName)

{

Age=newAge;

Name=newName;

}

...

}

 

Посмотреть на действия конструкторов в тестовом классе можно так:

...

worker wrk1=new worker();

worker wrk2=new worker(40, "Petrov");

System.out.println(wrk1.getAge() + "n" + wrk1.Name);

System.out.println(wrk2.getAge() + "n" + wrk2.Name);

 

Для первого работника вызовется конструктор без параметров и его возраст установится в 20, для второго - конструктор с параметрами, и его возраст станет равным 40, а имя - Petrov

 

Если вы не заведете в классе конструктора, то компилятор java создаст его сам.

worker wrk=new worker();

 

Здесь worker() - это как раз вызов конструктора без параметров. Создаваемый по умолчанию конструктор ничего не делает.

 

Абстрактные методы

Когда мы строим иерархию классов, то может оказаться, что некоторый метод должен присутствовать во всех классах, но во всех классах он имеет разную…   Так вот, если метод должен присутствовать во всех классах-потомках, и в каждом из них он имеет свою реализацию, то…

Модификатор final

Иногда мы не хотим, чтобы от некоторого созданного нами класса можно было производить классы-потомки. Например, это может понадобиться в целях…   В этом случае мы объявляем класс с ключевым словом final. Вот пример:

Статические члены класса

 

Переменные, которые вы объявляете внутри класса, относятся к определенному экземпляру класса. Например, у класса worker, который мы рассматривали ранее, есть переменная Age (возраст). Понятно, что у одного работника возраст один, а у другого - другой, и эти два возраста между собой никак не связаны. С другой стороны, иногда нам нужна общая переменная на все экземпляры класса. Например, это может быть счетчик количества экземпляров класса. В этом случае такую переменную надо объявить с модификатором static. Вот пример:

class someclass

{

//Счетчик

static public int number;

//Конструктор

public someclass()

{

number++; //Увеличиваем счетчик

}

}

class Test{

public static void main(String [] args){

//Создаем два экземпляра класса someclass

someclass z1=new someclass();

someclass z2=new someclass();

System.out.println(someclass.number + "n");

}

}

 

Как вы видите, переменная number объявлена как static. Это означает, что она одна на все экземпляры. В конструкторе она увеличивается на 1. Т. е. для первого экземпляра класса она будет равна 1, для второго - 2 и т. д. Что мы и проверяем в классе Test - заводим два экземпляра класса someclass, а затем выводим значение number. Естественно, что number будет равно 2. Обратите внимание, что в строке

...

System.out.println(someclass.number + "n");

 

 

переменную number мы извлекаем не из конкретного экземплярра класса (z1, z2), а из самого класса someclass. Это возможно именно потому, что переменная number - статическая. Но, в принципе, в этом месте мы могли бы использовать и конкретный экземпляр класса - результат был бы тот же самый.

 

Первая оконная программа

Все программы, которые мы создавали до сих пор, были консольными. На этом занятии мы с вами создадим первую программу, которая будет будет иметь…   Вот текст нашей первой оконной программы. Наберите его в любом текстовом редакторе.

Читаем строку с клавиатуры

Вы, наверное, обратили внимание, что раньше мы старательно избегали получать данные от пользователя. Значения всем переменным мы задавали…   Вот пример класса, который умеет читать строку с клавиатуры и выводить ее на экран:

Читаем числа с клавиатуры

Вот пример класса, который может читать числа с клавиатуры: import java.io.*; class NumReader{

Закрытие оконной программы

Давайте дополним код нашей первой оконной программы по крайней мере таким образом, чтобы она закрывалась: import java.awt.*; import java.awt.event.*;

Библиотека классов Java - обзор

 

Классы Java объединяются в пакеты. В число основных пакетов Java входят следующие:

java.awt - классы и интерфейсы для создания пользовательского интерфейса

java.applet - классы для создания java-апплетов

java.io - классы для ввода-вывода (в том числе с консолью и файлами)

java.net - классы и интерфейсы для работы с сетью

java.math - классы для различных математических операций ()

java.lang - содержит наиболее общие для java классы и интерфейсы

java.util - пакет различных полезных классов (случайные числа, списки, даты и др.)

java.beans - пакет для создания компонентов JavaBeans

java.sql - пакет классов и интерфейсов для работы с базами данных

java.secuirity - пакет классов и интерфейсов для обеспечения безопасности

 

Пакет java.awt - обзор

Пакет java.awt предназначен для создания пользовательского интерфейса. Он, в частности, содержит классы для различных компонентов - кнопок,…   Вот основные классы этого пакета:

Библиотека Swing - делаем окно

В Java существует две библиотеки для создания пользовательского интерфейса - Awt и Swing. Swing считается более продвинутой и современной. Сегодня…   Итак, приступаем. Вот исходный текст нашей программы:

Swing: добавляем кнопку с обработчиком

Посмотрим, как можно добавить к созданному ранее окну кнопку с обработчиком.   Наша кнопка будет экземпляром класса JButton. Вообще схема работы с элементами управления такая - сначала мы создаем…

Swing: кнопка с двумя состояниями

В библиотеке swing наряду с обычной кнопкой есть кнопка с двумя состояниями - нажатом и отжатом. Она работает приблизительно как checkbox, только…   Вот пример использования такой кнопки:

Правильное закрытие программы

Созданные нами ранее программы работали не вполне корректно - а именно после своего закрытия они оставались в памяти. Убедится в этом было…    

Swing: элемент JCheckBox

Элемент JCheckBox - это обычный checkbox (флажок). Он имеет вид квадратика, в котором может стоять (или не стоять) галочка. Этот элемент может иметь…   Посмотрим, как практически сделать такой элемент.

Swing: JRadioButton

Элемент управления JRadioButton предназначен для организации выбора только одного значения из нескольких возможных. Для этого несколько элементов…   Вот пример кода:

Swing: Несколько групп радиокнопок

Ранее мы рассмотрели работу с одной группой радиокнопок. Сейчас же мы с вами посмотрим, как работать с несколькими группами радиокнопок.   Приведем сразу листинг программы:

Swing: Список JList

Класс JList предназначен для выбора пользователем одного или нескольких значений из списка. В этом элементе пользовательского интерфейса можно…   Вот пример применения JList:

Простой графический редактор

import java.awt.*; import java.awt.event.*; public class DrawCanvas extends Canvas {

Интерфейсы

Интерфейсы в Java предназначены только для объявления некоторых методов и констант. Никакие реализации методов в интерфейсах не предусматриваются.…   Интерфейсы вводятся ключевым словом interface. В объявлении же класса, реализующего некоторый интерфейс, после имени…

Менеджеры компоновок

  При проектировании интерфейса пользователя с использованием языка Java…  

Интерфейс в качестве типа

Мы не можем создать экземпляр интерфейса. Именно потому, что у него не существует реализации методов. Т. е. мы не можем написать, например, так: IFigure f = new IFigure(); // Ошибка!  

Множественное наследование

В Java, как и во многих других языках программирования, не допускается множественное наследование для классов. У класса может быть только один…   Вот несколько примеров (в которых подразумевается, что интерфейсы IInterface1 и IInterface2 существуют):

Сериализация класса

 

Для того, чтобы экземпляр класса можно было сохранять (например в файл) и потом восстанавливать (например, из файла), класс должен быть сериализуемым. В этом случае сохранение / чтение экземпляра класса будет происходить не поэлементно (что тоже возможно), а целиком.

 

Вообще же говоря, сериализация - это представление некого объекта в последовательной форме, а десериализация - это восстановление объекта из последовательной формы.

 

Для того, чтобы класс стал сериализуемым, его надо просто объявить потомком интерфейса Serializable. Методов в этом интерфейсе нет.

 

Вот сразу пример сериализуемого класса:

import java.io.*;

public class Worker implements Serializable {

// Данные класса.

int age=0;

int yoe=0;

Worker(int age, int yoe){

this.age = age;

this.yoe = yoe;

}

 

// Метод main.

public static void main(String[] args)

throws IOException, ClassNotFoundException {

// Сериализация экземпляра класса.

Worker w = new Worker(22, 2);

ObjectOutputStream os = new ObjectOutputStream(

new FileOutputStream("1.txt"));

os.writeObject(w);

os.close();

 

// Десериализация экземпляра класса.

Worker w1 = new Worker(0, 0);

ObjectInputStream ois = new ObjectInputStream(

new FileInputStream("1.txt"));

w1 = (Worker)ois.readObject();

ois.close();

System.out.println("age = " + w1.age + ", yoe = " + w1.yoe);

}

}

 

Статический метод main, по идее, должен был бы быть в отдельном классе. Мы поместили его в этот же класс для упрощения. В этом методе мы сериализуем в файл 1.txt экземпляр нашего класса (со значениями полей 22 и 2) и потом десериализуем данные из этого файла в другой экземпляр этого же класса Worker. Результат будет вполне ожидаемым - значения полей в новом экземпляре класса будут такие же - 22 и 2.

 

Инверсия списка

Рассмотрим с вами решение классической задачи - инверсии (т. е. размещению элементов в обратном порядке) списка. Список устроен следующим образом:… public class ListReverse {

Класс File

 

Класс File предназначен для работы с файлом как с отдельным объектом. Этот класс не предназначен для работы с содержимым файла. Этот класс расположен в пространстве имен java.io.

 

Вот пример его использования:

import java.io.*;

public class Test {

public static void main(String[] args) throws InterruptedException, IOException {

File file = new File("C:\tmp.txt");

// Проверяем существование файла.

exsists(file);

// Создаем новый файл.

file.createNewFile();

// Проверяем существование файла.

exsists(file);

// Переименование файла.

file.renameTo(new File("C:\tmp2.txt"));

// Время последней модификации.

System.out.println("Last modified: " + file.lastModified());

 

// Имя файла.

System.out.println("Name: " + file.getName());

 

// Путь к файлу.

System.out.println("Parent: " + file.getParent());

 

// Удаление файла.

file.delete();

 

// Получеие разделителя.

System.out.println("Separator: " + File.separator);

 

// Создание временного файла.

System.out.println("Roots: " + File.createTempFile("AAA","ZZ"));

}

private static void exsists(File file) {

if(file.exists()){

System.out.println("File exists.");

}

else{

System.out.println("File doesn't exist");

}

}

}

 

Обратите внимание на несколько моментов. Метод renameTo предназначенный для переименования файла, должен принимать в качестве параметра (т. е. нового файла) файл, расположенный в той же папке, что и первоначальный файл (в этом случае этот метод возвращает true, в противном случае - false). Второе: при указании полного имени файла надо вместо одного слеша () указывать два (\).

 

У класса File существует небольшое число статических методов. В нашем примере их рассматривается два - для получения разделителя в именах файлов (для Windows это "") и для создания временного файла. Последний метод возвращает полный путь к созданному файлу (что-то типа "C:DOCUME~1AdminLOCALS~1TempAAA46533ZZ").

 

Работа с файлами и дисками

Для работы с файлами и дисками служит все тот же рассмотренный нами ранее класс File. Вот несколько примеров его использования для работы с папками… import java.io.*; public class Test1 {

Получение системных свойств

Для получения системных свойств (таких, например, как имя пользователя, версия виртуальной java-машины или разделителя между папками для конкретной… public class Test1 { public static void main(String[] args) {

Перечисления (enum) 2

В Java, в отличие от многих других языков программирования, в перечисления можно добавлять методы, переменные и другие члены. Этим перечисления…   Вот пример объявления такого перечисления:

Вызов конструктора из другого конструктора.

Часто для того, чтобы избежать написание повторяющегося кода инициализации, необходимо вызвать код одного конструктора из другого.   Вот пример, как это можно делать:

АППЛЕТЫ

Что такое апплет?

Апплетом может как небольшая программа, так и большая и сложная, взаимодействующая, например, с программой на сайте, откуда этот апплет был… Для того, чтобы апплет мог выполнятся в браузере, в последнем должна быть… Не ясна поддержка апплетов и в будущих версиях IE. Microsoft заявляла, что в дальшейшем она не будет поддерживать язык…

Пишем первый апплет

Теперь создайте в той же папке, где расположен файл FirstApplet.java, HTML-файл test.htm следующего содержания: <html><head>… Компилируем файл FirstApplet.java обычным образом - набрав в командной строке…

Рисуем прямоугольники и эллипсы

Вот так можно изменить код для рисования нашего апплета из прошлого урока: import java.applet.*;import java.awt.*;public class FirstApplet… Параметры у этих четырех методов идентичны - первые два задают x и y левого… Откомпилируйте апплет и откройте созданную на прошлом уроке тестовую html-страничку. Наш апплет будет вылядеть так: …

Закрашиваем фон

Вот пример апплета с синим цветом фона: import java.applet.*;import java.awt.*;public class FirstApplet extends Applet{ public void… Откомпилируйте апплет и откройте созданную на прошлом уроке тестовую…

Информация в строке состояния браузера

Апплет может показывать информацию в строке браузера. Делается это через метод showStatus:

import java.applet.*;import java.awt.*;public class FirstApplet extends Applet{ public void paint(Graphics g){ showStatus("First Applet"); }}

Параметр метода showStatus выведется в строке состояния браузера:

 

Класс Color

Класс Color относится к пакету java.awt.

Переменная типа Color задает цвет в формате RGB (расшифровывается как Red, Gree, Blue - красный, зеленый, синий) - каждая цветовая составляющая может принимать значения от 0 до 255.

Для создания переменной типа Color можно использовать множество конструкторов. Мы рассмотрим три из них:

Color color1=new Color(255, 255, 0); Color color2=new Color((float)0.2, (float)0.9, (float)0); Color color3=new Color(0xFFFF00);

Первый конструктор задает три составляющие цвета числами от 0 (отсутствие цвета) до 255 (самый интенсивный цвет), второй - тоже самое, только интенсивность каждого цвета может задаваться вещественным числом от 0 до 1, третий конструктор задает все три цвета в одним числом (которое удобнее всего задавать в шестнадцатеричном виде, что мы и сделали).

Кроме того в классе Color определены константы для стандартных цветов. Эти константы относятся ко всему классу, а не к конкретному экземпляру. Вот пример их использования:

Color color=Color.blue;

Таких констант не слишком много, но основные цвета часто удобнее задавать ими. Вот все эти константы:

  • black
  • blue
  • cyan
  • darkGray
  • gray
  • green
  • lightGray
  • magenta
  • orange
  • pink
  • red
  • white
  • yellow

Изменяем шрифт

Вот пример: ... public void paint(Graphics g){ //Создаем новый шрифт. Font font=new Font("Courier", Font.BOLD|Font.ITALIC, 20);… Апплет с таким методом paint покажет две надписи "Test", выведенных…

Мигающая надпись

Перерисовку мы делаем в отдельном потоке, вызывая метод repaint(). Для создания отдельного потока мы производим наш класс от интерфейса Runnable,… После запуска апплета вы увидите надпись test то красного, то зеленого цветов.

Бегущая строка

При запуске апплета появится движущаяся направо надпись.

Работаем с мышью

Когда происходит некоторое событие (например, щелчок мышкой или ее движение), то управление передается методу класса, в котором реализован интерфейс… Для использования событий в некотором классе мы должны использовать пакет… События в библиотеке AWT классифицированы. Они представляют из себя иерархию классов. Во главе этой иерархии стоит…

Интерфейс MouseListener

В этом интерфейсе существует следующие пять методов: mouseClicked (щелчок мышью) mouseEntered (ввод мыши в пределы апплета) mouseExited… Все эти методы имеют тип void и в них передается единственный параметр типа… Для того, чтобы апплет подерживал указанные события, необходимо, во-первых, указать интерфейс MouseListener в качестве…

Интерфейс MouseMotionListener

В этом интерфейсе только два метода: mouseMoved (перемещение мыши) mouseDragged (перетаскивание мыши) Как и для интерфейса MouseListener, эти оба метода имеют тип void и один… Вот пример использования этого интерфейса: import java.applet.*;import java.awt.*;import java.awt.event.*; public…

Класс MouseEvent

В предыдущих уроках мы рассматривали работу с мышкой. Напомним, что для этого мы объявляли класс нашего апплета потомком интерфейсов MouseListener и MouseMotionListener. Во всех методах интерфейсов, которые мы должны были реализовать для нашего апплета, присутствовал параметр типа MouseEvent. Рассмотрим этот класс более подробно.

Указанный класс позволяет получить такие данные, как координаты мыши (x и y), нажатую кнопку мыши (левая, правая или средняя), была ли нажата одна из трех клавиш-модификаторов на клавиатуре - Ctrl, Alt или Shift.

Вот пример реализации метода mouseClicked интерфейса MouseListener:

public void mouseClicked(MouseEvent e){ if(e.getButton()==MouseEvent.BUTTON1){ x=e.getX(); y=e.getY(); repaint(); } }

В этом примере мы определяем, что за кнопка мыши была нажата, используя при этом метод getButton() и статическую константу BUTTON1 класса MouseEvent (для остальных кнопок мыши константы будут BUTTON2 и BUTTON3 соответственно). Если нажата левая кнопка мыши, то мы получаем координаты мыши через вызов методов getX() и getY() класса MouseEvent и вызываем перерисовку. Наряду с методами getX() и getY() можно использовать и метод getPoint() - он возвращает объект типа Point.

А вот пример, в котором мы определяем, была ли при нажатии кнопки мыши удержана клавиша Alt:

public void mouseClicked(MouseEvent e){ if(e.isAltDown()){ p = e.getPoint(); // p - переменная типа Point. repaint(); } }

Тут для опеределения, была ли нажата клавиша Alt, мы используем метод isAltDown класса MouseEvent. Соответствующие методы для других кнопок - это isControlDown() и isShiftDown().

Метод update()

Часто при перерисовке апплета надо отрисовывать заново не весь апплет, а только его часть. Например, у вас в апплете может быть неподвижный фон, по которому что-то там движеться. Для перерисовки в этом случае не надо перерисовывать весь фон, а только ту его часть, на которой находился и находится движущийся объект. При таким способе перерисовки мы избавимся и от неприятного мерцания нашего апплета.

Для такой частичной перерисовки мы использем не метод paint (который перерисовывает все), а метод update, который позволяет задать для перерисовки только часть апплета.

Вот пример, иллюстрирующий это:

public void update(Graphics g){ // Задаем прямоугольник для перерисовки. g.clipRect(0, 0, 50, 50); // Вызываем перерисовку. paint(g); }

Здесь мы задаем прямоугольник для перерисовки с помощью метода clipRect класса Graphics. Параметры у него такие - x и y начальной точки и ширина с высотой. После задания прямоугольника для перерисовки мы вызываем метод paint, в который в качестве параметра передаем тот же самый g, для которого мы только что вызвали метод clipRect. Разумеется метод paint должен быть тоже определен в нашем апплете (например, такой, как в уроке 8).

Работаем с клавиатурой

Вот пример апплета, реагирующего на нажатия клавиш на клавиатуре. import java.applet.*;import java.awt.*;import java.awt.event.*;public class… После запуска апплета в нем будет появляться текст, который мы будем набирать…

Вставляем изображение в апплет

Вот пример такого использования графического файла: import java.awt.*;import java.applet.*;import java.awt.image.*; public class FirstApplet… Первым делом мы тут импортируем нужное пространство имен java.awt.image. Далее… Потом загруженное изображение мы выводим в методе paint путем вызова метода drawImage.

Заполение фона градиентом

А вот и код: import java.awt.*;import java.applet.*;public class FirstApplet extends Applet{ int a, b; // Ширина и высота окна. public void… Апплет будет выглядеть приблизительно так:

Передача данных в апплет

Вот пример код апплета, берущего параметры из html-страницы: import java.applet.*;import java.awt.*;public class Applet1 extends Applet { String… Как вы видите, основной метод для взятия кода - это getParameter. Возвращает… Откуда же наш апплет берет значения параметров? Как уже говорилось, из самой html-страницы. Вот код для такой…

Продолжение игры

Нам осталось только добавить обработчики для щелчка мыши. При нажатии на кнопку мыши мы будет проверять, не попали ли мы на муху и если попали, то… Приступаем к коду. Для добавдения возможности реагиирования на события мыши надо добавить строку, импортирующую соответствующие классы: …

Создание нового приложения для CDC – профиль AGUI

 

Ниже представлена процедура создания приложения для CDC (Xlet) для профиля AGUI с помощью инструментария Sun Java Toolkit для CDC 1.0.

В главном окне выберите "File > New Project" (Ctrl+Shift+N).

В области "Categories" выберите "Mobility". В "Projects" выберите "CDC Application". Нажмите кнопку "Next".

На странице "Name and Location":

Присвойте проекту имя newcdc.

Измените имя "Main Class Name" на newcdc.Mainxlet.

Не снимайте флажки "Set as Main Project" и "Create Main Class".

На странице "Select Platform" с помощью раскрывающихся меню выберите Sun Java Toolkit for Connected Device Configuration в поле "Java Platform" и DefaultColorPhone в поле "Device". Не изменяйте настройки профиля.

Нажмите кнопку "Finish". В результате создается новое приложение, и в GUI Builder открывается форма главного класса.

 

Создание интерфейса приложения с помощью Project Matisse GUI Builder

 

Редактор Project Matisse GUI Builder можно использовать таким же образом, как и при обычной разработке J2SE. В GUI Builder щелкните правой кнопкой мыши форму "Main.java" и выберите "Set Layout > Free Layout". Затем перетащите элементы из окна "Palette" в область проектирования в GUI Builder. Удостоверьтесь, что в форме используются только элементы Swing. Поскольку платформа AGUI поддерживает Swing, то доступны только элементы оформления окон Swing.

 

Для получения дополнительных сведений о создании графического интерфейса для приложений для CDC см. Разработка графического интерфейса при помощи пакета NetBeans Mobility Pack для CDC.

 

По завершении щелкните правой кнопкой мыши проект в окне "Projects" и выберите "Run Project". Созданное приложение должно отобразиться в эмуляторе устройства.

 

Теперь можно выполнить отладку проекта, а также создать и выполнить тесты с помощью инфраструктуры JUnit.

Создание нового приложения для CDC – профиль Personal Profile

 

Здесь создается апплет для профиля Personal Profile с помощью SDK платформы Nokia Series 80 для ОС Symbian, Java, Personal Profile. Платформа Sony Ericsson также поддерживает профиль Personal Profile.

Выберите "File > New Project" (Ctrl+Shift+N). В области "Categories" выберите "Mobility". В "Projects" выберите шаблон "CDC Application". Нажмите кнопку "Next".

Укажите имя проекта S80CdcApplication и определите его местоположение в системе. Не снимайте флажок "Create Main Class". Нажмите кнопку "Next".

 

На странице "Select Platform" выберите "Nokia S80 Platform".

Нажмите кнопку "Finish". Среда IDE создает новое приложение и открывает форму главного класса в GUI Builder, как показано на следующем рисунке. Для просмотра исходного кода апплета нажмите кнопку "Source". Обратите внимание, что автоматически созданный код основан на профиле. В данном случае главный класс получен на основе java.awt.Frame.

 

 

Создание интерфейса приложения с помощью Project Matisse GUI Builder

 

Редактор Project Matisse GUI Builder можно использовать таким же образом, как и при обычной разработке J2SE. В GUI Builder щелкните правой кнопкой мыши форму "Main.java" и выберите "Set Layout > Free Design". Затем перетащите элементы из окна "Palette" в область проектирования в GUI Builder. Удостоверьтесь, что в форме используются только элементы AWT. Поскольку все устройства Nokia Series 80 поддерживают профиль Personal Profile, то доступны только элементы оформления окон AWT.

 

Для получения дополнительных сведений об использовании GUI Builder в среде IDE см. учебную карту по графическому интерфейсу Java и Project Matisse.

 

По завершении щелкните правой кнопкой мыши проект в окне "Projects" и выберите "Run Project". Приложение должно отобразиться в меню "Applications" в эмуляторе устройства. После этого можно запустить устройство в эмуляторе.

 

Теперь можно выполнить отладку проекта, а также создать и выполнить тесты с помощью инфраструктуры JUnit.

 

Создание нового приложения для CDC – профиль Foundation Profile

 

Этот раздел посвящен созданию приложения для CDC (Xlet) для профиля Foundation Profile с использованием эмулятора Embedded Software Architecture Emulator 1.14c компании Ricoh.

Выберите "File > New Project" (Ctrl+Shift+N). В области "Categories" выберите "Mobility". В "Projects" выберите шаблон "CDC Application". Нажмите кнопку "Next".

На экране "Name and Location" присвойте проекту имя MyRicohApplication и укажите местоположение проекта. Не снимайте флажок "Create Main Class". Нажмите кнопку "Next".

На странице "Select Platform" выберите "Ricoh 1.14c".

Нажмите кнопку "Finish". В результате создается новое приложение, главный класс которого открывается в редакторе исходного кода. Структура проекта показана на следующем рисунке. Обратите внимание, что автоматически созданный код основан на профиле. В данном случае главный класс получен на основе jp.co.ricoh.dsdk.xlet.Xlet. В этом профиле отсутствует поддержка редактора GUI Designer среды NetBeans.

Для запуска проекта выберите "Run > Run Main Project". Эмулятор выводит на экран текст "TODO implement makeUIControls".

Теперь можно выполнить отладку проекта, а также создать и выполнить тесты с помощью инфраструктуры JUnit.


import javax.microedition.lcdui.*;

import javax.microedition.midlet.*;

public class MobileTest extends MIDlet

implements CommandListener, ItemCommandListener{

private Display display;

private Form LogoForm,QForm;

public MobileTest() {}

//Список вопросов теста

private String quest[]={"Из всех домашних растений Вы предпочитаете кактусы.",

"Вы уже год не мыли полы, потому что можете случайно задеть компьютерные провода.",

"Отключение в районе электричества равносильно для Вас стихийному бедствию.",

"Вы можете не помнить, как выглядят Ваши друзья, но всегда знаете их ники.",

"Почтальоны пугаются, когда видят знак @ на отправляемых вами письмах.",

"Вы предпочитаете использовать принтер, а не ручку.",

"Вы очень удивляетесь, когда в видите надпись ЭТО МЫШЬ рядом с хвостаты зверем."};

private StringItem str; //Сторка

private ChoiceGroup myCG; //Варианты ответов

private TextField TFName,TFAge; //Имя и возраст

private int cqnum=0; //Номер текущего вороса

private int maxq=quest.length; //Число вопросов

private int summ=0; //Число набранных балов

//Создаем комманды

private Command CMD_GO = new Command("Вперед", Command.ITEM, 1);

private Command CMD_PRESS = new Command("Нажать", Command.ITEM, 1);

private Command CMD_FIRST = new Command("Начать", Command.SCREEN, 1);

private Command CMD_START = new Command("OK", Command.SCREEN, 1);

private Command CMD_NEXT = new Command("OK", Command.SCREEN, 1);

private Command CMD_FINISH = new Command("Закончить", Command.SCREEN, 1);

private Command CMD_EXIT = new Command("Выход", Command.EXIT, 1);

protected void destroyApp( boolean unconditional ) throws MIDletStateChangeException

{ exitApp(); } // вызывает уборщик мусора

protected void pauseApp() { }

protected void startApp() throws MIDletStateChangeException

{ if( display == null )

{ initApp(); } }

private void initApp() //Этот метод выполняется при запуске мидлета

{ display = Display.getDisplay( this );

LogoForm=new Form("Mobile Test - Мир ПК"); //Создаем первую форму

LogoForm.setCommandListener(this);

//Добавляем рисунок. Обратите внимание, рисунок загружается в скобках try{}catch{}

try{ Image img=Image.createImage("/Logo.png");

ImageItem FormImg=new

ImageItem("МирПК - Тест",img,ImageItem.LAYOUT_CENTER,"");

LogoForm.append(FormImg);

}catch(java.io.IOException ex){}

//Создаем подпись

str = new StringItem("aRix", "www.mobilab.ru", Item.HYPERLINK);

LogoForm.append(str);

//подключаем ссылку

str.setDefaultCommand(CMD_GO);

str.setItemCommandListener(this);

//Добавляем подэкранные кнопки

LogoForm.addCommand(CMD_FIRST);

LogoForm.addCommand(CMD_EXIT);

//Объявляем обработчик команд

display.setCurrent(LogoForm);

//Создаем форму для вопросов, добавляем на нее кнопки и объявляем обработчик

QForm=new Form("Вопрос");

QForm.addCommand(CMD_NEXT);

QForm.addCommand(CMD_EXIT);

QForm.setCommandListener(this);

//Создаем список с вариантами вариантов.

myCG=new ChoiceGroup("Ответ",Choice.EXCLUSIVE);

myCG.append("Нет",null);

myCG.append("Иногда",null);

myCG.append("Да",null); }

private void questForm(int qnum) //Форма с вопросами

{ QForm.deleteAll(); //Очищаем форму

//Добавляем вопрос из массива

str = new StringItem("Вопрос", quest[qnum]);

QForm.append(str);

//Добавляем на форму вырианты ответов

QForm.append(myCG);

//Делаем окно формы видимым

display.setCurrent(QForm); }

public void exitApp()

{ notifyDestroyed(); } // уничтожение MIDlet-а

public void commandAction(Command c, Item item) {

if (c == CMD_GO) {

String text = "Переход по ссылке...";

Alert a = new Alert("URL", text, null, AlertType.INFO);

display.setCurrent(a); } }

public void commandAction(Command c, Displayable d) {

if (c == CMD_FIRST) { //Команда: загрузить первый экран

//Создаем форму

Form firstForm=new Form("Представьтесь пожалуйста");

//Размещаем на ней поля для ввода текста

TFName=new TextField("Ваше имя","",25,TextField.ANY);

TFAge=new TextField("Ваш возраст","",3,TextField.NUMERIC);

firstForm.append(TFName);

firstForm.append(TFAge);

//Добавляем команды

firstForm.addCommand(CMD_START);

firstForm.addCommand(CMD_EXIT);

firstForm.setCommandListener(this);

//Делаем окно формы видимым

display.setCurrent(firstForm); }

if (c == CMD_START) {//Команда о начале теста

questForm(0); }

if (c == CMD_NEXT) {//Команда перехода к следующему вопросу

cqnum=cqnum+1; //Увеличивем номер вопроса

if (cqnum==maxq-1){ //Проверяем, не последний ли это вопрос. Если да, меняем кнопку.

QForm.removeCommand(CMD_NEXT);

QForm.addCommand(CMD_FINISH); }

summ=summ+myCG.getSelectedIndex(); //Учитываем результат последнего ответа

questForm(cqnum); } //Переходим к следующему вопросу

if (c == CMD_FINISH) { //Команда о получении результата

summ=summ+myCG.getSelectedIndex(); //Учитываем результат последнего ответа

QForm.deleteAll(); //Очищаем форму

QForm.append(""+TFName.getString()+", ну что Вам сказать. ");//Выводим текст

//В зависимости от набранных очков выводим результат теста и соответствующую картинку.

if (summ<1){

QForm.append("Срочно купите себе компьютер!!!");

try{

Image img=Image.createImage("/1.png");

ImageItem FormImg=new

ImageItem("",img,ImageItem.LAYOUT_CENTER,"");

QForm.append(FormImg);

}catch(java.io.IOException ex){} }

else if (summ<3){

QForm.append("На вашем месте, я бы почаще включал компьютер.");

try{

Image img=Image.createImage("/2.png");

ImageItem FormImg=new

ImageItem("",img,ImageItem.LAYOUT_CENTER,"");

QForm.append(FormImg);

}catch(java.io.IOException ex){} }

else if (summ<7){

QForm.append("Вы вполне адекватный человек.");

try{

Image img=Image.createImage("/3.png");

ImageItem FormImg=new

ImageItem("",img,ImageItem.LAYOUT_CENTER,"");

QForm.append(FormImg);

}catch(java.io.IOException ex){} }

else if (summ<7){

QForm.append("Возможна мама была права, когда пыталась выкинуть Ваш компьютер.");

try{

Image img=Image.createImage("/4.png");

ImageItem FormImg=new

ImageItem("",img,ImageItem.LAYOUT_CENTER,"");

QForm.append(FormImg);

}catch(java.io.IOException ex){}

}

else

{

QForm.append("По-моему Вам давно пора лечиться (Если что, я в 7 палате).");

try{

Image img=Image.createImage("/5.png");

ImageItem FormImg=new

ImageItem("",img,ImageItem.LAYOUT_CENTER,"");

QForm.append(FormImg);

}catch(java.io.IOException ex){}

}

//Удаляем кнопку

QForm.removeCommand(CMD_FINISH);

}

if (c == CMD_EXIT){exitApp();} //Команда "Выход"

}

 

}

 

– Конец работы –

Используемые теги: Введение, Java0.101

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Введение в Java

Что будем делать с полученным материалом:

Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Еще рефераты, курсовые, дипломные работы на эту тему:

ЛЕКЦИЯ–ВВЕДЕНИЕ Тема лекции: Введение в дисциплину Безопасность жизнедеятельности . Взаимодействие человека и окружающей среды
Тема лекции Введение в дисциплину Безопасность жизнедеятельности... Цель лекции изучить источники возникновения развитие науки Безопасность жизнедеятельности е исторические основы...

КУРС ЛЕКЦИЙ: ВВЕДЕНИЕ ФИЛОСОФИЯ И ЖИЗНЕННЫЙ МИР ЧЕЛОВЕКА
СИМОНЕНКО Л П... ВВЕДЕНИЕ ФИЛОСОФИЯ И ЖИЗНЕННЫЙ МИР ЧЕЛОВЕКА В разные...

Введение в психоанализ
Все книги автора... Эта же книга в других форматах... Приятного чтения...

Введение в философию
Введение в философию... Фролов И Т Введение в философию...

Елена Васильевна Васильева, Татьяна Владимировна Макеева Экономическая теория: конспект лекций Введение в курс экономической теории Тема 1
Тема Введение в курс экономической теории Предмет методы функции принципы и законы экономической... Микроэкономика... Тема Товарное производство Товар и деньги Сущность и причины...

И.К. БЕЛЯЕВ ВВЕДЕНИЕ В РЕЖИССУРУ
ВВЕДЕНИЕ В РЕЖИССУРУ Курс для документалистов И К Беляев Введение в режиссуру Курс для документалистов... Часть I НУЖЕН ЛИ ТЕЛЕВИДЕНИЮ... Часть II...

ВВЕДЕНИЕ В АНЕСТЕЗИОЛОГИЮ
Харьковский национальный медицинский университет... ВВЕДЕНИЕ В АНЕСТЕЗИОЛОГИЮ...

АВТОМОДЕЛИЗМ: ВВЕДЕНИЕ И СОВЕТЫ НАЧИНАЮЩИМ
Большинство новичков сталкиваются с проблемой выбора своей первой автомодели... Задний привод или полный...

Введение в фармацевтический маркетинг
Фармацевтического факультета по фармацевтическому товароведению по теме... Введение в фармацевтический маркетинг...

ВВЕДЕНИЕ В ИЗУЧЕНИЕ КУРСА ОТЕЧЕСТВЕННАЯ ИСТОРИЯ
ОГЛАВЛЕНИЕ... ВВЕДЕНИЕ В ИЗУЧЕНИЕ КУРСА ОТЕЧЕСТВЕННАЯ ИСТОРИЯ ЛЕКЦИЯ ПРОИСХОЖДЕНИЕ ВОСТОЧНЫХ СЛАВЯН ПЕРЕХОД ОТ ВАРВАРСТВА К ЦИВИЛИЗАЦИИ...

0.048
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам