Изучаем Java. Создание или импорт файла исходного кода апплета. Создание файла исходного кода апплета
Апплеты
Первые два примера, представленные в этой книге, - это приложения, написанные на языке Java, т.е самостоятельные программы, аналогичные обычным машинозависимым программам.
С другой стороны, как упоминалось в предыдущей главе, ажиотаж вокруг языка Java был вызван, в основном, его возможностями выполнять апплеты под управлением Web-броузеров.
Мы хотим показать вам, как создать и выполнить апплет в режиме командной строки.
Затем мы загрузим этот апплет в программу для просмотра апплетов (appletviewer), входящую в состав пакета JDK.
В заключение мы отобразим его в Web-броузере.
Перейдите в каталог CoreJavaBook/vlch2/WelcomeApplet, а затем введите
следующие команды.
javac WelcomeApplet. java
appletviewer WelcomeApplet.html
На рис. 2.12 показано то, что вы увидите в окне программы для просмотра апплетов.
Рис. 2.12. Вид апплета WelcomeApplet в окне программы просмотра апплетов
Первая команда нам уже знакома - она вызывает компилятор языка Java. Он компилирует исходный текст апплета, содержащийся в файле WelcomeApplet. java, создавая файл байт-кода WelcomeApplet. class.
Однако на этот раз мы не запускаем интерпретатор языка Java. Вместо этого мы вызываем программу appletviewer. Эта программа специально предназначена для быстрого тестирования апплетов и входит в пакет Java SDK. Она работает не с файлом класса, а с файлом в формате HTML. Содержание файла WelcomeApplet.html показано в листинге 2.3.
Листинг 2.3
Файл WelcomeApplet.java
WelcomeApplet
This applet is from the book
Core Java by Cay Horstmann and
Gary Cornell, published by Sun Microsystems Press.
The source .
Если вы знаете язык HTML, то заметите некоторые стандартные команды языка HTML и дескриптор applet, приказывающие программе просмотра апплетов загрузить апплет, код которого содержится в файле WelcomeApplet, class. Программа аррletviewer игнорирует все дескрипторы языка HTML, за исключением дескриптора applet.
Другие дескрипторы языка HTML распознаются, когда файл в формате HTML просматривается броузером, поддерживающим язы к Java 2. Однако тут есть одна проблема.
Версии броузера Netscape 6, броузеры Mozilla и Opera поддерживают язык Java 2 как в среде Windows, так й на платформе Linux, хотя эта возможность является факультативной. Для того чтобы поэкспериментировать с апплетами, просто загрузите самую последнюю версию и убедитесь, она поддерживает Java.
Некоторые версии броузера Internet Explorer вообще не поддерживают язык Java. Другие версии поддерживают лишь очень старую виртуальную машину Java компании Microsoft (Java Virtual Machine). Если вы работаете с броузером Internet Explorer под управлением операционной системы Windows, зайдите на сайт http: //java. sun. com/get Java и загрузите программу Java Plug-In. Она добавит в броузер Internet Explorer возможности Java 2.
На платформе Macintosh под управлением операционной системы OS X возможности языка Java уже интегрированы в броузер Internet Explorer. В частности, на момент написания книги этот броузер поддерживал работу с пакетом J2SE версии 1.3. Система OS 9 поддерживает лишь устаревшую версию 1.1.
Если вы работаете с броузером Netscape 4, можете воспользоваться поддержкой языка Java 2, обеспечиваемой программой Java Plug-In. Однако при работе с апплетами, загружаемыми с помощью дескриптора applet, броузер будет по- прежнему использовать устаревшую виртуальную машину языка Java. Следовательно, придется переписать HTML-файл и вместо дескриптора applet использовать довольно неудобный дескриптор embed. Этот подход нельзя назвать удовлетворительным.
Если ваш броузер поддерживает платформу Java 2, попробуйте загрузить в него апплет. Для этого выполните следующие операции.
Запустите ваш броузер.
Выберите в меню опцию File -> Open File (или эквивалентную опцию).
Перейдите в каталог CoreJavaBook/vlch2/WelcomeApplet.
В диалоговом окне вы должны увидеть файлы WelcomeApplet .html и WelcomeAppletPlugin.html.
Загрузите файл, соответствующий вашей настройке. Броузер загрузит апплет вместе с окружающим его текстом. Он будет выглядеть примерно так, как показано на рис. 2.13.
Легко видеть, что это приложение действительно интерактивно и взаимодействует с Интернет. Нажмите на кнопку "Cay Horstmann". Апплет заставит броузер открыть Web- страницу Кея Хорстманна. Щелкните на кнопке "Gary Cornell". Апплет откроет окно для электронной почты, в котором уже указан адрес электронной почты Гари Корнелла.
Рис, 2.13. Запуск апплета WelcomeApplet с помощью броузера
Заметьте, что ни одна из этих кнопок не работает с программой просмотра аплетов. Эта программа не может посылать почту или отображать на экране Web-страницу, поэтому она просто проигнорирует ваши запросы. Программа просмотра апплетов хороша для тестирования изолированных апплетов, однако для реального взаимодействия апплета с Интернет и другими программами следует загрузить свой апплет в какой-либо броузер.
Апплет можно запустить из вашего текстового редактора или интегрированной среды разработки. При работе с редактором Emacs выберите в меню опцию JDE -> Run Applet.
При работе с редактором TextPad выберите опцию Tools -> Run Java Applet или используйте комбинацию клавиш
В среде Sun ONE Studio нужно просто загрузить HTML-файл с дескрипторами апплета. Эта среда содержит небольшой броузер, выполняющий апплет на соответствующей Web-странице. В качестве альтернативы можно щелкнуть правой кнопкой мыши на файле с исходным текстом апплета и установить значение свойства "Executor" на закладке равным
"Applet Execution".
Код апплета Welcome показан в листинге 2.4. В данный момент его нужно лишь бегло просмотреть. К созданию апплетов мы еще вернемся в главе 10.
Import javax.swing.*;
import java.awt.*;
import java.awt.event.*,
import java.net.*;public class WelcomeApplet extends JApplet
{
public void init()
{
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());JLabel label = new JLabel(getParameter("greeting") ,
SwingConstants.CENTER);
label.setFont(new Font("Serif", Font.BOLD, 18));
contentPane.add(label, BorderLayout.CENTER);JPanel panel = new JPanel();
JButton cayButton = new JButton("Cay Horstmann");
cayButton.addActionListener(makeURLActionListener
("http://www.horstmann.com"));
Jbutton garyButton = new Jbutton("Gary Cornell");
garyButton.addActionListener(makeURLActionListener
("mailto:garyOthecornells.com"));
panel.add(garyButton);
contentPane.add(panel, BorderLayout.South);
}
public ActionListener makeURLActionListener(fina1 string u)
{
return new
ActionListener ()
{
public void actionPerformed(ActionEvent event)
{
try {
getAppleContext().showDocument(u);
}
catch(Exeption e) (e.printStackTrace (); }
{
e. printStackTrace ();
}
}
} ;
В этой главе мы изучили механизмы компиляции и запуска программ, написанных на языке Java. Теперь мы готовы перейти к главе 3, в которой приступим к изучению языка Java.
Графические интерфейсы, рисунки и изображения могут быть реализованы в апплетах. Апплеты представляют собой разновидность графических приложений, реализованных в виде классов языка Java, которые размещаются на серверах Internet, транспортируются клиенту по сети, автоматически устанавливаются и запускаются браузером как часть документа HTML. Апплеты позволяют вставлять в документы поля, содержание которых меняется во времени, организовывать "бегущие строки", меню, мультипликацию, производить вычисления на клиентской странице. Апплеты выполняются браузером при отображении HTML-документа или просматриваются программой appletviewer. Апплеты не могут записывать файлы и читать информацию из файлов. Эти ограничения связаны с проблемой безопасности клиентского компьютера, поскольку клиенты не желают запускать «троянского коня» в свой компьютер. Существует несколько уровней безопасности, устанавливаемых клиентом для апплетов, загружаемых с сервера (надежные апплеты). КлассApplet обеспечивает интерфейс между апплетами и их окружением. Апплеты являются наследниками класса Applet из пакета java . applet из пакета AWT или его подкласса JApplet из пакета Swing.
Есть несколько методов класса Applet , которые управляют созданием и выполнением апплета на Web-странице. Апплету не нужен метод main() ,код запуска помещается в методе init() . Перегружаемый метод init() автоматически вызывается при загрузке апплета для выполнения начальной инициализации. Методstart() вызывается каждый раз, когда апплет переносится в поле зрения браузера, чтобы начать операции. Метод stop() вызывается каждый раз, когда апплет выходит из поля зрения Web-браузера, чтобы позволить апплету завершить операции. Метод d estroy() вызывается, когда апплет начинает выгружаться со страницы для выполнения финального освобождения ресурсов. Кроме этих методов, при выполнении апплета автоматически запускается метод paint () класса Component . Метод paint () не вызывается явно, а только из других методов, например из метода repaint () , если необходима перерисовка.
Ниже приведен пример апплета, в котором используются методы init () , paint () , методsetColor () установки цвета символов и метод drawString () рисования строк.
/* пример # 1: вывод даты: DateApplet .java */
package chapt11;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Calendar;
import java.util.Formatter;
import javax.swing.JApplet;
public class DateApplet extends JApplet {
private Formatter dateFmt = new Formatter();
private Formatter timeFmt = new Formatter();
public void init() {
setSize(180, 100);
Calendar c = Calendar.getInstance();
String era = "";
if (c.get(Calendar.ERA) == 1)
dateFmt.format("%tA %td.%tm.%tY года "
Era, c, c, c, c);
timeFmt.format("%tT", c);
public void paint(Graphics g) {
g.setColor(Color.RED);
g.drawString("Апплет стартовал в " + timeFmt,
10, getHeight()/2);
g.setColor(new Color(0,87,127));
g.drawString(dateFmt.toString(), 13,
getHeight() – 10);
Рис. 11.2. Вывод строки и даты
Доступ к элементам даты осуществлен с помощью класса java . util . Calendar . Цвет выводимых символов устанавливается с помощью полей класса Color .
После выполнения компиляции имя класса, содержащего байт-код апплета, помещается в тег < applet параметры> applet > документа HTML. Например:
width = 250 height = 250>
Исполнителем HTML-документа является браузер, который и запускает соответствующий ссылке апплет.
Большинство используемых в апплетах графических методов, как и использованные в примере методы setColor () , drawString() , – методы абстрактного базового класса java . awt . Graphics . КлассGraphics представляет графический контекст для рисования, который затем отображается на физическое устройство. Методы апплета получают объект класса Graphics (графический контекст) в качестве параметра и вместе с ним – текущий цвет, шрифт, положение курсора. Установку контекста обычно осуществляют методы update () или paint () .
Ниже перечислены некоторые методы класса Graphics :
drawLine (int x1, int y1, int x2, int y2) – рисует линию;
drawRect (int x, int y, int width, int height) и fillRect(int x, int y, int width, int height) – рисуют прямоугольник и заполненный прямоугольник;
draw3DRect(int x, int y, int width, int height, boolean raised) – рисует трехмерный прямоугольник;
drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) – рисует округленный прямоугольник;
drawOval(int x, int y, int width, int height) – рисует овал;
drawPolygon(int xPoints, int yPoints, int nPoints) – рисует полигон (многоугольник), заданный массивами координат x и y ;
drawPolygon (Polygon p ) – рисует полигон, заданный объектом Polygon ;
drawPolyline (int xPoints , int yPoints , int nPoints ) – рисует последовательность связных линий, заданных массивами x и y ;
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) – рисует дугу окружности;
drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) – вставляет изображение;
drawString (String str, int x, int y) – рисует строку;
setColor(Color c) , getColor() – устанавливает и возвращает текущий цвет;
getFont() – возвращает текущий шрифт;
setFont(Font font) – устанавливает новый шрифт.
Методы класса Graphics используются для отображения графики как для классов Applet , так и для классов JApplet .
В примерах 2–4, приведенных ниже, демонстрируется использование методов класса Graphics для вывода графических изображений в окно апплета.
/* пример # 2: трехмерные прямоугольники: Th rRect . java */
package chapt11;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JApplet;
public class ThrRect extends JApplet {
public void draw3D(Graphics g, int x, int y, int width, int height, boolean isRaised, boolean isFilled) {
g.draw3DRect(x, y, width – 1, height – 1,
g.draw3DRect(x + 1, y + 1, width – 3,
height – 3, isRaised);
g.draw3DRect(x + 2, y + 2, width – 5,
height – 5, isRaised);
if (isFilled)
g.fillRect(x + 3, y + 3, width – 6,
public void paint(Graphics g) {
g.setColor(Color.GRAY);
draw3D(g, 10, 5, 80, 40, true , false );
draw3D(g, 130, 5, 80, 40, false , false );
draw3D(g, 10, 55, 80, 40, true , true );
draw3D(g, 130, 55, 80, 40, false , true );
Рис . 11.3. Трехмерные прямоугольники
Пакет java.awt содержит большое число классов, используемых для вывода изображения: Color , Font , Image , Shape , Canvas и т.д. Кроме того, возможности этого пакета расширяют пакеты java.awt.geom , java.awt.color , java.awt.image и другие.
/* пример # 3: построение фигур : BuildShape. java */
package chapt11;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.*;
import javax.swing.JApplet;
public class BuildShape extends JApplet {
public void init() {
setSize(200, 205);
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.rotate(Math.PI / 6);
drawChessBoard(g);
//поворот
g2.rotate(-Math.PI / 6);
g.setXORMode(new Color(200, 255, 250));
Shape e = new Ellipse2D.Float(70, 75, 70, 50);
//рисование эллипса
//рисование шахматной доски
public void drawChessBoard(Graphics g) {
int size = 16;
for (int y = 0; y < 8; y++) {
for (int x = 0; x < 8; x++) {
if ((x + y) % 2 == 0)
g.setColor(Color.BLUE);
g.setColor(Color.WHITE);
g.fillRect(75 + x * size, y * size – 25, size, size);
g.setColor(Color.BLACK);
g.drawString(new Character(
(char ) (‘8’ – y)).toString(), 66, y * size – 13);
g.drawString(new Character(
(char ) (y + ‘a’)).toString(),
79 + y * size, 8 * size – 14);
Рис. 11.4. Построение различных фигур
// пример # 4: вывод GIF -изображения: DrawImage . java
package chapt11;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JApplet;
public class DrawImage extends JApplet {
private Image img;
public void init() {
img = getImage(getCodeBase(), "joli.gif");
public void paint(Graphics g){
g.drawImage(img, 0, 0, this );
При использовании свойств тега существует возможность передать параметры из HTML-документа в код апплета. Пусть HTML-документ имеет вид:
width=250 height=300>
applet >