Создание простого браузера в Java

Цель занятия

Освоить возможности реализации средствами языка Java простейшего браузера. Изучить возможности и функции браузера. Познакомиться с системой навигации по сайтам. Дополнительные источники информации [13].

Краткие теоретические сведения

Для создания браузера как объекта необходимо к базовому классу подключить интерфейс HyperiinkListener. Браузер будет открывать указываемый ему сайт на панели jEditorPane, используя параметр-объект типа URL (Universal Resource Locator — универсальный адрес ресурсов):

URL url=new URL(String initialUrl);

JEditorPane htmlPane= new JEditorPane(url); htmlPane.setPage(url);

Для навигации по гиперссылкам необходимо подключить прослушиватель:

htmlPane.addHyperlinkListener(this);

Данный прослушиватель реагирует на событие, связанное со сменой документов.

Мы будем выполнять навигацию так: набираем в текстовом поле новый URL, щелкаем по текстовому полю мышью и обрабатываем событие от текстового поля так, как показано далее:

Public void actionPerformed(Actionevent ae)

{

String url;

if(ae.getSource()== urlField)

{

url= urlField.getText();

JOptionPane. showMessageDialog(null, "url="+url); try

htmlPane.setPage(new URL(url));

JOptionPane.showMessageDialog(null,

"ActivatedFrom>"+url);

catch (IOException io)

U

else

В этом примере использован объект htmiPane класса jEditor- Pane, который открывает HTML-документ с помощью команды setPage(URL url). Класс JEditorPane описан в пакете javax.swing. Открытие в окне документа и есть реализация функций простейшего браузера. Класс jEditorPane позволяет отображать только текстовую информацию HTML-документа, но не предоставляет взможности отображать, например, рисунки. В приложении мы снабжаем объект jEditorPane полосой вертикальной прокрутки для просмотра больших сайтов. Это делается так:

JScrollPane sp= new JScrollPane(htmlPane); // полоса

// прокрутки для больших сайтов getContentPane().add(sp, BorderLayout.CENTER);

После набора в текстовом поле нового URL и нажатия клавиши <Enter> будет открыт новый документ. Заметим, что адрес документа следует записывать с указанием слова fiie в самом начале:

file:/с:/Sun/1.html

Нажатие клавиши в активном текстовом поле обеспечивает cpa- батываение метода интерфейса ActionListener:

// Обработчик событий от кнопки и текстового поля: public void actionPerformed(ActionEvent ae)

{

String url;

if(ae.getSource()==urlField) // Событие возникло при нажатии

// клавиши для активного // текстового поля // с адресом URL

url=urlField.getText();

JOptionPane.showMessageDialog(null,"url="+url); try {

// Смена сайта по этой команде: htmlPane.setPage(new URL(urlField.getText()));

}

catch (IOException ioe)

П

else

if (ae.getSource()==bl)

System.exit(0);

Приведем также текст обработчика события HyperiinkEvent: public void hyperlinkUpdate(HyperlinkEvent hle) // Это // обработчик событий от смены сайта. Просто выводим // сообщение:

if(hle.getSource()== HyperlinkEvent.EventType.ACTIVATED) JOptionPane.showMessageDialog(null,"NewURLLoaded");

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

Листинг 2.34. Простой браузер

import javax.swing.*; import javax.swing.event.*; import java.awt.*;

import java.awt.event.*; import java.net.*; import java.io.*;

public class Browser extends JFrame

implements HyperlinkListener, ActionListener // Подключение

// интерфейсов

{

public static void main(String[]args)

{

Browser br= new Browser("file:/c:/Sun/l.html");

// Указываем, какой сайт открыть

br.setSize(600,800);

br.setBackground(new Color(100,200,200)); br.setVisible(true);

}

private JButton Ы; // Кнопка для завершения приложения private JTextField urlField; // Текстовое поле для ввода url private JEditorPane htmlPane; // Панель для отображения сайта private String initialUrl; public Browser(String initurl)

{

this.initialUrl= initurl;

JPanel topPanel = new JPanel(); // Панель для размещения

// кнопки и текстового поля

urlField=new JTextField(40);

urlField.setText(this.initialUrl); // Адрес сайта

// в текстовое поле urlField.addActionListener(this); // Нажатие кнопки вызывает

// смену сайта

topPanel.add(urlField); bl= new JButton("EXIT");

Ы.addActionListener(this);

topPanel.add(Ы);

Container knt=getContentPane(); knt.add(topPanel,BorderLayout.NORTH); try {

JOptionPane.showMessageDialog(null,"Try to create URL"); URL url = new URL(this.initialUrl);

JOptionPane.showMessageDialog(null,""+url.toExternalForm());

// Команда toExternalForm() преобразует url в строку htmlPane= new JEditorPane(url); // htmlPane отображает

// сайт

htmlPane.setEditable(false); // Содержимое сайта нельзя

// редактировать htmlPane.addHyperlinkListener(this); // Этот

// прослушиватель // реагирует на смену // сайтов

htmlPane.setBackground(new Color(200,200,200)); htmlPane.setPage(url); // Отображаем сайт этой командой JScrollPane sp= new JScrollPane(htmlPane); // Полоса

// прокрутки // для больших // сайтов

getContentPane().add(sp, BorderLayout.CENTER);

}

catch(IOException ioe)

{}

}

public void actionPerformed(ActionEvent ae) // Обработчик // событий от кнопки и текстового поля

String url;

if(ae.getSource()==urlField) // Событие возникло при нажатии // клавиши для активного текстового поля с адресом URL {

url=urlField.getText();

JOptionPane.showMessageDialog(null,"url="+url);

try

{

htmlPane.setPage(new URL(urlField.getText())); // Смена

// сайта // по этой команде

}

catch (IOException ioe)

U

}

else

if (ae.getSource()==bl)

System.exit(0);

}

public void hyperlinkUpdate(HyperlinkEvent hle) // Это // обработчик событий от смены сайта. Просто выводим // сообщение.

{

if(hle.getSource()== HyperlinkEvent.EventType.ACTIVATED)

{

JOptionPane.showMessageDialog(null,"NewURLLoaded");

}

}

}

Окно созданного браузера и результат отображения документа приведены на рис. 2.23.

Рис. 2.23. Окно простейшего браузера

Резюмируя материал занятия, обратим внимание на два обстоятельства.

□      При указании пути к сайту нужно помещать префикс fiie:/ , например:

file:/с:/Sun/1.html

□      Созданный нами браузер отображает текстовую информацию и не отображает рисунки.

Задание

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

Источник: Герман О. B., Герман Ю. О., Программирование на Java и C# для студента. — СПб.: БХВ-Петербург, 2005. — 512 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100