Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Пример 2.21.

Читайте также:
  1. V. Примерный образец теста, применяемого для промежуточной аттестации
  2. Web-контейнер, Servlet, JSP. Структура, назначение и пример сервлета или JSP.
  3. А вот чрезмерное употребление алкоголя действительно вызывает гинекомастию. Примерно четверо из 10 хронических алкоголиков имеют это заболевание в той или иной стадии развития.
  4. А. Здравомыслов.Примерно два года тому назад.
  5. Ая основа – Хаджури не видит разницы между нововведенцем, призывающим к своему нововведению, и не призывающим, и пример в этом он взял с Махмуда Хаддада.
  6. Будьте хорошим примером для своих детей
  7. Быть примером
  8. В наших примерах мы ни разу не рассматривали конструкторы классов, поэтому при создании экземпляров наших классов вызывался конструктор класса object.
  9. В приведенном примере нарушение синтезов пространственного гнозиса и обусловливает ряд следствий, что можно представить схематично.
  10. В только что приведенном вами примере с под­брасыванием монеты компьютерное моделирование

 

package WebBrowser.java;import java.awt.*; // LayoutManager и проч.import javax.swing.*; // Компоненты Swing import java.awt.event.*; // обработчики событий AWT import javax.swing.event.*; // обработчики событий Swing import java.beans.*; // обработчики событий JavaBeans import java.awt.print.*; // Функции печатиimport java.io.*; // Ввод/выводimport java.net.*; // Сетевые операции с URLimport java.util.*; // Матрицы, массивы и прочие служебные функции// Импортируем класс по имени. Его использует JfileChooser, а его имя// конфликтует с java.io.FileFilterimport javax.swing.filechooser.FileFilter; // Импортируем класс для печати Swing-документов. import PrintableDocument.java; /** * Класс, реализующий простой браузер на основе компонента * JEditorPane, способного отображать HTML. **/public class WebBrowser extends JFrame implements HyperlinkListener, PropertyChangeListener{ /** * Метод main() использующий класс WebBrowser * как самостоятельное приложение. **/ public static void main(String[] args) throws IOException { // Завершение программы при закрытии окон браузера. WebBrowser.setExitWhenLastWindowClosed(true); WebBrowser browser = new WebBrowser(); // Создание окна браузера browser.setSize(800, 600); // Установка его размеров browser.setVisible(true); // Его видимость. // Сообщаем браузеру об отображаемой информации. browser.displayPage((args.length > 0)? args[0]: browser.getHome()); } // Класс использует GUIResourceBundle для создания меню и панели // инструментов. // Статический инициализатор регистрирует необходимые классы // ResourceParser. static { GUIResourceBundle.registerResourceParser(new MenuBarParser()); GUIResourceBundle.registerResourceParser(new MenuParser()); GUIResourceBundle.registerResourceParser(new ActionParser()); GUIResourceBundle.registerResourceParser(new CommandParser()); GUIResourceBundle.registerResourceParser(new ToolBarParser()); } // Компоненты Swing, используемые браузером JEditorPane textPane; // Для отображения HTML JLabel messageLine; // Для строчных сообщений JTextField urlField; // Для отображения и редактирования URL JFileChooser fileChooser; // Для выбора локального файла // Действия Actions, используемые в меню и панели инструментов. // Явные ссылки на них обеспечивает GUIResourceBundle, // поэтому их можно разрешать и запрещать. Action backAction, forwardAction; // В этих полях хранится история переходов для окна java.util.List history = new ArrayList(); // Список переходов int currentHistoryPage = -1; // Текущее положение public static final int MAX_HISTORY = 50; // длина списка // Статические поля для управления поведением close() static int numBrowserWindows = 0; static boolean exitWhenLastWindowClosed = false; // Место переноса метода "home()", setHome() String home = "http://www.rsute.ru"; // Значение по умолчанию /** Создаем окно WebBrowser */ public WebBrowser() { super(); // Ссылка на конструктор JFrame textPane = new JEditorPane(); // Окно для отображения HTML textPane.setEditable(false); // Запрет на редактирование // Регистрируем слушателей действий: для обработки гиперссылок; // для уведомлений об изменении свойств. Он сообщает о загрузке // документа. Класс реализует интерфейсы // EventListener и методы, определенные ниже. textPane.addHyperlinkListener(this); textPane.addPropertyChangeListener(this); // Размещаем текстовую панель JScrollPane в центре окна this.getContentPane().add(new JScrollPane(textPane), BorderLayout.CENTER); // Строку сообщений размещаем внизу окна messageLine = new JLabel(" "); this.getContentPane().add(messageLine, BorderLayout.SOUTH); // Читаем файл WebBrowserResources.properties (и его локальные // варианты) для создания GUIResourceBundle, из которого // получим меню и панель инструментов. GUIResourceBundle resources = new GUIResourceBundle(this,"com.davidflanagan.examples.gui." + "WebBrowserResources"); // Считываем панель инструментов из набора ресурсов. JMenuBar menubar = (JMenuBar) resources.getResource("menubar", JMenuBar.class); this.setJMenuBar(menubar); // Панель инструментов берем из набора ресурсов. JToolBar toolbar = (JToolBar) resources.getResource("toolbar", JToolBar.class); // Создаем текстовое поле для ввода URL. // Устанавливаем слушатель действий на нажатие ENTER urlField = new JTextField(); urlField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { displayPage(urlField.getText()); } }); // Помещаем поле URL с надписью в конец панели инструментов toolbar.add(new JLabel(" URL:")); toolbar.add(urlField); // И размещаем панель инструментов вверху окна this.getContentPane().add(toolbar, BorderLayout.NORTH); // Считываем копии двух объектов Action из набора ресурсов. // Они используются меню и панелью инструментов // и их можно разрешать и запрещать. backAction = (Action)resources.getResource("action.back",Action.class); forwardAction = (Action)resources.getResource("action.forward", Action.class); // Стартуем с запрещенными действиями backAction.setEnabled(false); forwardAction.setEnabled(false); // Создаем ThemeManager для окна, // помещаем меню Theme в полосу меню ThemeManager themes = new ThemeManager(this, resources); menubar.add(themes.getThemeMenu()); // Контролируем количество открытых окон браузера WebBrowser.numBrowserWindows++; } ** Устанавливаем статическое свойство, управляющее поведением close() */ public static void setExitWhenLastWindowClosed(boolean b) { exitWhenLastWindowClosed = b; } /** Методы доступа к свойствам home. */ public void setHome(String home) { this.home = home; } public String getHome() { return home; } /** * Внутренний метод для загрузки и отображения URL. * Он используется в разных местах класса. **/ boolean visit(URL url) { try { String href = url.toString(); // Начало анимации. Она остановится в propertyChanged() startAnimation("Загрузка " + href + "..."); textPane.setPage(url); // Загрузка и отображение URL this.setTitle(href); // Отображение URL в заголовке окна urlField.setText(href); // Отображение URL в поле ввода текста return true; // Успех } catch (IOException ex) { // Если загрузка не удалась stopAnimation(); messageLine.setText("Невозможно загрузить: " + ex.getMessage()); return false; // сигнал об ошибке } } /** * Просим браузер отобразить URL, поместив его в историю * history list. **/ public void displayPage(URL url) { if (visit(url)) { // переход на url, и в случае успеха: history.add(url); // помещение его в историю int numentries = history.size(); if (numentries > MAX_HISTORY+10) { // Обрезка длины списка history = history.subList(numentries-MAX_HISTORY, numentries); numentries = MAX_HISTORY; } currentHistoryPage = numentries-1; // Установка положения текущей //страницы в истории // Если необходимо возвращение, то разрешаем Back if (currentHistoryPage > 0) backAction.setEnabled(true); } } /** подобно displayPage(URL), но принимает строку */ public void displayPage(String href) { try { displayPage(new URL(href)); } catch (MalformedURLException ex) { messageLine.setText("Bad URL: " + href); } } /** выбор и отображение локального файла */ public void openPage() { // не создаем JFileChooser без необходимости if (fileChooser == null) { fileChooser = new JFileChooser(); // Фильтр javax.swing.filechooser.FileFilter отображает файлы HTML FileFilter filter = new FileFilter() { public boolean accept(File f) { String fn = f.getName(); if (fn.endsWith(".html") || fn.endsWith(".htm")) return true; else return false; } public String getDescription() { return "HTML Files"; } }; fileChooser.setFileFilter(filter); fileChooser.addChoosableFileFilter(filter); } // Просим пользователя выбрать файл. int result = fileChooser.showOpenDialog(this); if (result == JFileChooser.APPROVE_OPTION) { // Если не нажал "Cancel", отображаем файл. File selectedFile = fileChooser.getSelectedFile(); String url = "file://" + selectedFile.getAbsolutePath(); displayPage(url); } } /** Возврат к предыдущей странице. */ public void back() { if (currentHistoryPage > 0) // идем назад visit((URL)history.get(--currentHistoryPage)); // разрешаем и запрещаем действия backAction.setEnabled((currentHistoryPage > 0)); forwardAction.setEnabled((currentHistoryPage < history.size()-1)); } /** Переход вперед на следующую страницу истории */ public void forward() { if (currentHistoryPage < history.size()-1) // идем вперед visit((URL)history.get(++currentHistoryPage)); // разрешаем и запрещаем действия backAction.setEnabled((currentHistoryPage > 0)); forwardAction.setEnabled((currentHistoryPage < history.size()-1)); } /** Перезагрузка текущей страницы */ public void reload() { if (currentHistoryPage!= -1) visit((URL)history.get(currentHistoryPage)); } /** Отображаем страницу, определенную свойством "home" */ public void home() { displayPage(getHome()); } /** открытие нового окна браузера */ public void newBrowser() { WebBrowser b = new WebBrowser(); b.setSize(this.getWidth(), this.getHeight()); b.setVisible(true); } /** * Закрытие окна. Если оно единственное, то значение * and exitWhenLastBrowserClosed равно true, завершение работы VM **/ public void close() { this.setVisible(false); // скрываем окно this.dispose(); // уничтожаеи окно synchronized(WebBrowser.class) { // синхронизируем WebBrowser.numBrowserWindows--; // одно окно закрыто if ((numBrowserWindows==0) && exitWhenLastWindowClosed) System.exit(0); // выход, если оно последнее } } /** * Выход из VM. Если confirm принимает значение true, то запрос * подтверждения пользователя с помощью showConfirmDialog() **/ public void exit(boolean confirm) { if (!confirm || (JOptionPane.showConfirmDialog(this, // родительский диалог /* отображаемое сообщение*/ "Если уверены, то выход?", /* название диалога */ "Окончательный выход?", /* кнопки диалога */ JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)) // Если нажата Yes System.exit(0); } /** * Печатаем содержимое текстовой панели с помощью java.awt.print API * Все делает класс PrintableDocument. **/ public void print() { // Получаем объект PrinterJob PrinterJob job = PrinterJob.getPrinterJob(); // Объект для печати PrintableDocument pd = new PrintableDocument(textPane); // Сообщаем PrinterJob что надо печатать job.setPageable(pd); // Отображение диалога печати if (job.printDialog()) { // если все готово, try { job.print(); } // то начинаем печать! catch(PrinterException ex) { // отображение сообщений об ошибках messageLine.setText("Couldn't print: " + ex.getMessage()); } } } /** * Метод HyperlinkListener. Организует работу с гиперссылками **/ public void hyperlinkUpdate(HyperlinkEvent e) { HyperlinkEvent.EventType type = e.getEventType(); // что случилось? if (type == HyperlinkEvent.EventType.ACTIVATED) { // Щелчок! displayPage(e.getURL()); // По ссылке переходим на новую страницу } else if (type == HyperlinkEvent.EventType.ENTERED) { // указатель // мыши над ссылкой! // При перемещении указателя над ссылкой, отображение ее messageLine.setText(e.getURL().toString()); } else if (type == HyperlinkEvent.EventType.EXITED) { // Указатель за // пределами! messageLine.setText(" "); // Очистка строки сообщения } } /** * Метод, реализуемый java.beans.PropertyChangeListener. * Он вызывается при изменении свойства объекта JEditorPane. * Используем свойство "page" конца загрузки страницы **/ public void propertyChange(PropertyChangeEvent e) { if (e.getPropertyName().equals("page")) // При изменении свойства, stopAnimation(); // останавливаем анимацию } /** * Методы и свойства, реализующие простую анимацию **/ String animationMessage; // Отображение сообщения "loading..." int animationFrame = 0; // в зависимости от кадра "frame" String[] animationFrames = new String[] { // Содержимое каждого "frame" "-", "\\", "|", "/", "-", "\\", "|", "/", ",", ".", "o", "0", "O", "#", "*", "+" }; /** Объект вызывает метод animate() 8 раз в секунду */ javax.swing.Timer animator = new javax.swing.Timer(125, new ActionListener() { public void actionPerformed(ActionEvent e) { animate(); } }); /** Отображаем следующий кадр. Вызов анимации из таймера */ void animate() { String frame = animationFrames[animationFrame++]; // next frame messageLine.setText(animationMessage + " " + frame); // обновляем animationFrame = animationFrame % animationFrames.length; } /** Запуск анимации методом visit(). */ void startAnimation(String msg) { animationMessage = msg; // Сохранение сообщения animationFrame = 0; // Начинаем с 0 кадра animator.start(); // Запуск таймера. } /** Остановка анимации. Вызов из метода propertyChanged(). */ void stopAnimation() { animator.stop(); // Останавливаем таймер messageLine.setText(" "); // Очищаем строку сообщений }}

 




Дата добавления: 2015-09-11; просмотров: 25 | Поможем написать вашу работу | Нарушение авторских прав

Практическое занятие № 7 | Пример 2.1. | Пример 2.2. | Глава 2.2. Графические интерфейсы пользователя в Java | Компоненты. | Пример 2.8. | Пример 2.15. | Пример 2.16. | Пример 2.18. | Пример 2.19. |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав