AWT поддерживает следующие типы элементов управления: Текстовые метки (Labels) Кнопки (Push buttons) Флажки (Check boxes) Списки с выбором элементов (Choice lists) Списки (Lists) Полосы прокрутки (Scroll bars) Элементы редактирования текста: текстовые поля (Text fields) и текстовые области (Text areas). Элементы управления представлены специальными классами пакета AWT, которые являются подклассами1 класса component.
Добавление и удаление элементов управления Для включения элемента управления в окно нужно добавить его к окну. Для этого необходимо сначала создать экземпляр желательного элемента управления и затем добавить его к окну вызовом метода add (), который определен в классе Container. Метод add () имеет несколько форм. В первой части этой главы используется следующая форма: Component add(Component aompObj) Текстовые метки Самый простой для использования элемент управления — (текстовая) метка (label). Текстовая метка — это объект класса Label, содержащий строку, которую она отображает. Метки — пассивные элементы управления, которые не поддерживают никакого взаимодействия с пользователем. Класс Label определяет следующие конструкторы: Label () Label (String str) Label (String str, int how) Первая версия создает пустую метку, вторая — метку, которая содержит строку, специфицированную параметром str. Эта строка выровнена по левому краю. Третья версия создает метку, которая содержит строку, специфицированную параметром str, используя выравнивание, указанное в параметре how. Значением how должна быть одна из трех констант: Label. left, Label.RIGHT ИЛИ Label.CENTER.
. Работа в сети. Работа с сокетами в Java.Сокеты (сетевые разъёмы) – это логическое понятие, соответствующее разъёмам, к которым подключены сетевые компьютеры и через которые осуществляяется двунаправленная поточная передача данных между компьютерами. Сокет определяется номером порта и IP-адресом. При этом IP-адрес используется для идентификации компьютера, номер порта – для идентификации процесса, работающего на компьютере. Когда одно приложение знает сокет другого, создается сокетноепротоколо-ориентированное соединение по протоколу TCP/IP. Клиент пытается соединиться с сервером, инициализируя сокетное соединение. Сервер прослушивает сообщение и ждет, пока клиент не свяжется с ним. Первое сообщение, посылаемое клиентом на сервер, содержит сокет клиента. Сервер, в свою очередь, создает сокет, который будет использоваться для связи с клиентом, и посылает его клиенту с первым сообщением. После этого устанавливается коммуникационное соединение.
Сокетное соединение с сервером создается клиентом с помощью объекта классаSocket. При этом указывается IP-адрес сервера и номер порта. Если указано символьное имя домена, то Java преобразует его с помощью DNS-сервера к IP-адресу. Например, если сервер установлен на этом же компьютере, соединение с сервером можно установить из приложения клиента с помощью инструкции:Socket socket = new Socket("ИМЯ_СЕРВЕРА", 8030);Сервер ожидает сообщения клиента и должен быть заранее запущен с указанием определенного порта. Объект класса ServerSocketсоздается с указанием конструктору номера порта и ожидает сообщения клиента с помощью методаaccept()класса ServerSocket, который возвращает сокет клиента:ServerSocket server = new ServerSocket(8030);Socket socket = server.accept();Таким образом, для установки необходимо установить IP-адрес и номер порта сервера, IP-адрес и номер порта клиента. Обычно порт клиента и сервера устанавливаются одинаковыми. Клиент и сервер после установления сокетного соединения могут получать данные из потока ввода и записывать данные в поток вывода с помощью методов getInputStrеam() и getOutputStrеam() или кPrintStream для того, чтобы программа могла трактовать поток как выходные файлы.В следующем примере для отправки клиенту строки "привет!" сервер вызывает метод getOutputStream() класса Socket. Клиент получает данные от сервера с помощью метода getInputStream(). Для разъединения клиента и сервера после завершения работы сокет закрывается с помощью метода close() класса Socket. В данном примере сервер отправляет клиенту строку "привет!", после чего разрывает связь.
73.
Работа в сети. Дейтаграммы.Конечно, для того, чтобы передать данные с одной машины на другую необходимо убедиться, что вы подсоединились к определенной машине в сети. Ранние варианты сетей были удовлетворены предоставлением уникальных имен машинам внутри локальной сети. Однако, Java работает в пределах Internet, что требует способа для уникальной идентификации машины из любой точки всего мира. Это выполняется с помощью IP (InternetProtocol) адреса, который может существовать в двух формах:1.Привычнаяформа DNS (Domain Name System). Мое доменное имя - bruceeckel.com;2.Альтернативный вариант: вы можете использовать форму из четырех чисел, разделенных точками, например 123.255.28.120.В обоих случаях IP адрес представляется как 32-х битное число [1] и вы можете получить специальный Java объект для представления этого числа из любой из перечисленных выше форм, используя статический метод InetAddress.getByName( ), который определен в java.net. Результатом будет объект типа InetAddress, который вы можете использовать для создания "сокета", как вы это увидите.
//: c15:WhoAmI.java // Нахождение вашего сетевого адреса, когда // вы соединены с Internet'ом. // {Запускается руками} Должно быть установлено соединение с Internet // {Args: www.google.com} import java.net.*; publicclass WhoAmI { publicstatic void main(String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: WhoAmIMachineName"); System.exit(1); } InetAddress a = InetAddress.getByName(args[0]); System.out.println(a); } } // /:~ДейтаграммыДейтаграммы, или пакеты протокола UDP (User DatagramProtocol) — это пакеты информации, пересылаемые в сети по принципу “fire-and-forget” (выстрелил и забыл). Если вам надо добиться оптимальной производительности, и вы в состоянии минимизировать затраты на проверку целостности информации, пакеты UDP могут оказаться весьма полезными. UDP не предусматривает проверок и подтверждений при передаче информации. При передаче пакета UDP по какому-либо адресу нет никакой гарантии того, что он будет принят, и даже того, что по этому адресу вообще есть кому принимать такие пакеты. Аналогично, когда вы получаете дейтаграмму, у вас нет никаких гарантий, что она не была повреждена в пути или что ее отправитель все еще ждет от вас подтверждения ее получения. Java реализует дейтаграммы на базе протокола UDP, используя для этого два класса. Объекты класса DatagramPacket представляют собой контейнеры с данными, a DatagramSocket — это механизм, используемый при передаче и получении объектов DatagramPacket.
74.
Работа с фреймовыми окнами. Создание фрейм окна в апплетах.Иерархия классов
Container
Window — окно верхнего уровня. Нет рамок, строк заголовка, располагается на рабочем столе.
Frame — Окно с рамкой. Появляется строка меню, заголовок, статусбар, углы, изменяющие размер окна.
JFrame.
Dialog
FileDialog
JDialog
JWindow
// Пример апплета, создающего дополнительное окно
importjava.awt.*;
importjava.awt.event.*;
importjava.applet.*;
// Определим наш собственный класс окна
classDemoFrameextendsFrame {
DemoFrame(Stringtitle) {
// Окно будет иметь заголовок
super(title);
}
}
// Основной класс апплета
publicclassAppletFrameDemoextends Applet{
DemoFrame frame; // ссылканаокно
publicvoidinit(){
// Создадимэкземплярнашегоклассаокна
frame = newDemoFrame("My Frame");
// Добавим код для корректного закрытия окна,
// воспользовавшись анонимным классом
// вызывает нужные методы у адаптера при соответствующих событиях
frame.addWindowListener(
// содержит все возможные события и имплементирует все инетрфейсы
newWindowAdapter(){
publicvoidwindowClosing(WindowEvent e){
e.getWindow().dispose();
System.exit(0);
}
}
);
// Установим геометрические размеры окна
// в пикселях относительно всего экрана
// Отступ слева = 100
// Отступ сверху = 100
// Ширина окна = 200
// Высота окна = 200
frame.setBounds(100, 100, 200, 200);
}
publicvoidstart(){
// При старте апплета покажем окно на экране
frame.show();
}
publicvoid stop(){
// Во время остановки апплета уберем окно с экрана
frame.hide();
}
publicvoid destroy(){
// При завершении работы апплета очистим класс окна
frame.dispose();
}
}
75.
Оконные приложения.Для создания оконных приложений удобнее всего использовать класс Frame. В иерархии классов он выглядит следующим образом:
java.lang.Object
+----java.awt.Component
+----java.awt.Container
+----java.awt.Window
+----java.awt.Frame
По своей природе этот класс похож на классы Applet и Panel. В объекте класса Frame можно размещать элементы управления. Класс, производный от Frame, может раскрывать интерфейсы ActionListener и ItemListener. Простейшее оконное приложение имеет вид: importjava.awt.event.*;
importjava.awt.*;
classsimpleFrame extends Frame
{
public static void main(String[] args)
{
simpleFrame a= new simpleFrame("Оконноеприложение");
}
simpleFrame(String title)
{
setTitle(title);
setSize(400,200);
show();
}
}
На первый взгляд структура программы не совсем привычна - в функции main создается объект того же класса, к которому принадлежит функция main. Зато при создании объекта можно вызвать конструктор с параметрами.
Если вы запустите это приложение, то сразу же обратите внимание, что кнопка закрытия окна не работает. Для обработки событий окна нужно писать специальный код. Он может выглядеть, например, так (код располагается в конструкторе)
addWindowListener(
newWindowAdapter()
{ public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
};
76.
Работа с графикой и цветом.В данном разделе рассмотрим рисование в окне апплета простейших геометрических фигур. Начальной точкой каждого окна считается его левый верхний угол с координатами (0, 0) . Координаты задаются в пикселях. Первая координата увеличивается слева направо. Вторая координата увеличивается сверху вниз. Если фигура (линия) превосходит по размеру окно апплета, то она обрезается.Вся информация выводится в окно апплета с помощьюграфического контекста, который находится в классе Graphics и может быть получен разными способами, например, в качестве параметра при вызове метода Paint() (То есть это то, что мы использовали во всех предыдущих примерах). Фигуры изображаются выбранным в данный момент цветом, а по умолчанию черным. Ниже приводятся графические методы:
2. Рисование прямоугольников. Вывод контура прямоугольника: drawRect(X1, Y1, HX, HY); Здесь: X1, Y1 - координаты верхнего левого угла прямоугольника, HX, HY - длина и высота прямоугольника.Вывод заполненного прямоугольника: fillRect(X1, Y1, HX, HY);с теми же значениями параметров.Прямоугольник с закругленными углами: drawRoundRect(X1, Y1, HX, HY, DX, DY); первые 4 параметра не изменились: X1, Y1 - координаты верхнего левого угла прямоугольника, HX, HY - длина и высота прямоугольника, DX, DY - соответственно диаметры закруглений вдоль осей.Заполненный прямоугольник с закругленными углами: fillRoundRect(X1, Y1, HX, HY, DX, DY); с теми же значениями параметров.
3. Рисование эллипсов и окружностей. Для изображения контура эллипса используется метод: drawOval(X1, Y1, HX, HY); в качестве параметров используются параметры описанного прямоугольника.Для изображения заполненного эллипса эллипса используется метод: fillOval(X1, Y1, HX, HY);Для изображения круга задайте квадрат в качестве описанного прямоугольника.
4. Рисование дуг. Дуга изображается с помощью следующих методов: drawArc(X1, Y1, HX, HY, G1, G2); fillArc(X1, Y1, HX, HY, G1, G2); Дуга ограничивается прямоугольником, верхний левый угол которого находится в точке X1, Y1 а ширина и высота - соответственно HX, HY G1 - начальный угол в градусах, G2 - угол в градусах, образуемый дугой.
5. Рисование многоугольников. Фигуры произвольной формы можно нарисовать с помощью следующих методов: drawPolygon(X[ ], Y[ ], N); fillPolygon(X[ ], Y[ ], N); вершины многоугольника задаются парами координат, содержащихся в массивах X[ ], Y[ ] Число вершин многоугольнике задается параметром N.Экземпляр графического объекта Graphics g
g.setColor(Color color); // установкацвета
Color.RED, BLUE, CYAN, GREE, ....
Color(int r, int g, int b)
Использование статических переменных класса Color:
Color.blue, Color.BLUE, Color.red
Конструктор
newColor(r, g, b);
Пример.newColor(255, 100, 100) светло-красный
77.
Установка режима рисованияРежим рисования (paintmode) определяет спoсоб изображения объектов в окне. По умолчанию при выводе новых объектов они накладываются на все ранее существующее содержимое окна. Однако с помощью методаsetXORMode() можно смешивать цвет новых объектов с цветом уже существующих.voidsetXORMode(Color цвет)где параметр цвет определяет цвет для рисования объекта в окне. Преимущество режима смешивания цветов состоит в том, что новый объект всегда будет видимым независимо от цвета объекта, на фоне которого он был нарисован. Чтобы вернуться к режиму наложения следует использовать setPaintMode().voidsetPaintMode() Режим наложения цветов следует использовать для обычного вывода в окно, а режим смешивания - в специальных целях. Следующая программа выводит на экран перекрестие для отслеживания положения указателя мыши. Этот крестик выводится в окне в режиме рисования XOR и постоянно остается видимым.// Демонстрация цветов importjava.awt.*; importjava.applet.*; /* <appletcode = "XOR" width=300 height=200> </applet> */
publicclass XOR extendsApplet { intchsX = 100, chsY = 100; // Рисование перекрестия для // отображения положения мыши publicbooleanmouseMove(Eventevtobj, int x, int y){ chsX = x-10; chsY = y-10; repaint(); returntrue; }