<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FTiny_Application%2FBrowser</id>
		<title>Java/Tiny Application/Browser - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FTiny_Application%2FBrowser"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Tiny_Application/Browser&amp;action=history"/>
		<updated>2026-04-23T02:42:42Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Tiny_Application/Browser&amp;diff=8849&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Tiny_Application/Browser&amp;diff=8849&amp;oldid=prev"/>
				<updated>2010-06-01T07:19:45Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 07:19, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java/Tiny_Application/Browser&amp;diff=8848&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java/Tiny_Application/Browser&amp;diff=8848&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:47Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Brower based on JEditorPane ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Cursor;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.event.KeyAdapter;&lt;br /&gt;
import java.awt.event.KeyEvent;&lt;br /&gt;
import java.awt.event.WindowAdapter;&lt;br /&gt;
import java.awt.event.WindowEvent;&lt;br /&gt;
import java.awt.event.WindowListener;&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.io.FileOutputStream;&lt;br /&gt;
import java.io.ObjectInput;&lt;br /&gt;
import java.io.ObjectInputStream;&lt;br /&gt;
import java.io.ObjectOutput;&lt;br /&gt;
import java.io.ObjectOutputStream;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
import javax.swing.Box;&lt;br /&gt;
import javax.swing.BoxLayout;&lt;br /&gt;
import javax.swing.ruboBoxModel;&lt;br /&gt;
import javax.swing.Icon;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JComboBox;&lt;br /&gt;
import javax.swing.JEditorPane;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JOptionPane;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
import javax.swing.event.HyperlinkEvent;&lt;br /&gt;
import javax.swing.event.HyperlinkListener;&lt;br /&gt;
public class Browser extends JFrame {&lt;br /&gt;
  protected JEditorPane m_browser;&lt;br /&gt;
  protected MemComboBox m_locator = new MemComboBox();&lt;br /&gt;
  public Browser() {&lt;br /&gt;
    super(&amp;quot;HTML Browser&amp;quot;);&lt;br /&gt;
    setSize(500, 300);&lt;br /&gt;
    getContentPane().setLayout(new BorderLayout());&lt;br /&gt;
    JPanel p = new JPanel();&lt;br /&gt;
    p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));&lt;br /&gt;
    p.add(new JLabel(&amp;quot;Address&amp;quot;));&lt;br /&gt;
    m_locator.load(&amp;quot;addresses.dat&amp;quot;);&lt;br /&gt;
    BrowserListener lst = new BrowserListener();&lt;br /&gt;
    m_locator.addActionListener(lst);&lt;br /&gt;
    MemComboAgent agent = new MemComboAgent(m_locator);&lt;br /&gt;
    p.add(m_locator);&lt;br /&gt;
    getContentPane().add(p, BorderLayout.NORTH);&lt;br /&gt;
    m_browser = new JEditorPane();&lt;br /&gt;
    m_browser.setEditable(false);&lt;br /&gt;
    m_browser.addHyperlinkListener(lst);&lt;br /&gt;
    JScrollPane sp = new JScrollPane();&lt;br /&gt;
    sp.getViewport().add(m_browser);&lt;br /&gt;
    getContentPane().add(sp, BorderLayout.CENTER);&lt;br /&gt;
    WindowListener wndCloser = new WindowAdapter() {&lt;br /&gt;
      public void windowClosing(WindowEvent e) {&lt;br /&gt;
        m_locator.save(&amp;quot;addresses.dat&amp;quot;);&lt;br /&gt;
        System.exit(0);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    addWindowListener(wndCloser);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
    m_locator.grabFocus();&lt;br /&gt;
  }&lt;br /&gt;
  class BrowserListener implements ActionListener, HyperlinkListener {&lt;br /&gt;
    public void actionPerformed(ActionEvent evt) {&lt;br /&gt;
      String sUrl = (String) m_locator.getSelectedItem();&lt;br /&gt;
      if (sUrl == null || sUrl.length() == 0 )&lt;br /&gt;
        return;&lt;br /&gt;
      BrowserLoader loader = new BrowserLoader(sUrl);&lt;br /&gt;
      loader.start();&lt;br /&gt;
    }&lt;br /&gt;
    public void hyperlinkUpdate(HyperlinkEvent e) {&lt;br /&gt;
      URL url = e.getURL();&lt;br /&gt;
      if (url == null )&lt;br /&gt;
        return;&lt;br /&gt;
      BrowserLoader loader = new BrowserLoader(url.toString());&lt;br /&gt;
      loader.start();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  class BrowserLoader extends Thread {&lt;br /&gt;
    protected String m_sUrl;&lt;br /&gt;
    public BrowserLoader(String sUrl) {&lt;br /&gt;
      m_sUrl = sUrl;&lt;br /&gt;
    }&lt;br /&gt;
    public void run() {&lt;br /&gt;
      setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));&lt;br /&gt;
      try {&lt;br /&gt;
        URL source = new URL(m_sUrl);&lt;br /&gt;
        m_browser.setPage(source);&lt;br /&gt;
        m_locator.add(m_sUrl);&lt;br /&gt;
      } catch (Exception e) {&lt;br /&gt;
        JOptionPane.showMessageDialog(Browser.this, &amp;quot;Error: &amp;quot;&lt;br /&gt;
            + e.toString(), &amp;quot;Warning&amp;quot;, JOptionPane.WARNING_MESSAGE);&lt;br /&gt;
      }&lt;br /&gt;
      setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String argv[]) {&lt;br /&gt;
    new Browser();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MemComboAgent extends KeyAdapter {&lt;br /&gt;
  protected JComboBox m_comboBox;&lt;br /&gt;
  protected JTextField m_editor;&lt;br /&gt;
  public MemComboAgent(JComboBox comboBox) {&lt;br /&gt;
    m_comboBox = comboBox;&lt;br /&gt;
    m_editor = (JTextField) comboBox.getEditor().getEditorComponent();&lt;br /&gt;
    m_editor.addKeyListener(this);&lt;br /&gt;
  }&lt;br /&gt;
  public void keyReleased(KeyEvent e) {&lt;br /&gt;
    char ch = e.getKeyChar();&lt;br /&gt;
    if (ch == KeyEvent.CHAR_UNDEFINED || Character.isISOControl(ch))&lt;br /&gt;
      return;&lt;br /&gt;
    int pos = m_editor.getCaretPosition();&lt;br /&gt;
    String str = m_editor.getText();&lt;br /&gt;
    if (str.length() == 0)&lt;br /&gt;
      return;&lt;br /&gt;
    for (int k = 0; k &amp;lt; m_comboBox.getItemCount(); k++) {&lt;br /&gt;
      String item = m_comboBox.getItemAt(k).toString();&lt;br /&gt;
      if (item.startsWith(str)) {&lt;br /&gt;
        m_editor.setText(item);&lt;br /&gt;
        m_editor.setCaretPosition(item.length());&lt;br /&gt;
        m_editor.moveCaretPosition(pos);&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MemComboBox extends JComboBox {&lt;br /&gt;
  public static final int MAX_MEM_LEN = 30;&lt;br /&gt;
  public MemComboBox() {&lt;br /&gt;
    super();&lt;br /&gt;
    setEditable(true);&lt;br /&gt;
  }&lt;br /&gt;
  public void add(String item) {&lt;br /&gt;
    removeItem(item);&lt;br /&gt;
    insertItemAt(item, 0);&lt;br /&gt;
    setSelectedItem(item);&lt;br /&gt;
    if (getItemCount() &amp;gt; MAX_MEM_LEN)&lt;br /&gt;
      removeItemAt(getItemCount() - 1);&lt;br /&gt;
  }&lt;br /&gt;
  public void load(String fName) {&lt;br /&gt;
    try {&lt;br /&gt;
      if (getItemCount() &amp;gt; 0)&lt;br /&gt;
        removeAllItems();&lt;br /&gt;
      File f = new File(fName);&lt;br /&gt;
      if (!f.exists())&lt;br /&gt;
        return;&lt;br /&gt;
      FileInputStream fStream = new FileInputStream(f);&lt;br /&gt;
      ObjectInput stream = new ObjectInputStream(fStream);&lt;br /&gt;
      Object obj = stream.readObject();&lt;br /&gt;
      if (obj instanceof ComboBoxModel)&lt;br /&gt;
        setModel((ComboBoxModel) obj);&lt;br /&gt;
      stream.close();&lt;br /&gt;
      fStream.close();&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
      System.err.println(&amp;quot;Serialization error: &amp;quot; + e.toString());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void save(String fName) {&lt;br /&gt;
    try {&lt;br /&gt;
      FileOutputStream fStream = new FileOutputStream(fName);&lt;br /&gt;
      ObjectOutput stream = new ObjectOutputStream(fStream);&lt;br /&gt;
      stream.writeObject(getModel());&lt;br /&gt;
      stream.flush();&lt;br /&gt;
      stream.close();&lt;br /&gt;
      fStream.close();&lt;br /&gt;
    } catch (Exception e) {&lt;br /&gt;
      System.err.println(&amp;quot;Serialization error: &amp;quot; + e.toString());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Drag and drop web browser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.datatransfer.DataFlavor;&lt;br /&gt;
import java.awt.datatransfer.Transferable;&lt;br /&gt;
import java.awt.datatransfer.UnsupportedFlavorException;&lt;br /&gt;
import java.awt.dnd.DnDConstants;&lt;br /&gt;
import java.awt.dnd.DropTarget;&lt;br /&gt;
import java.awt.dnd.DropTargetDragEvent;&lt;br /&gt;
import java.awt.dnd.DropTargetDropEvent;&lt;br /&gt;
import java.awt.dnd.DropTargetEvent;&lt;br /&gt;
import java.awt.dnd.DropTargetListener;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JEditorPane;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
import javax.swing.JToolBar;&lt;br /&gt;
import javax.swing.event.HyperlinkEvent;&lt;br /&gt;
import javax.swing.event.HyperlinkListener;&lt;br /&gt;
public class DnDWebBrowser extends JFrame {&lt;br /&gt;
  private WebToolBar toolBar;&lt;br /&gt;
  private WebBrowserPane browserPane = new WebBrowserPane();&lt;br /&gt;
  public DnDWebBrowser() {&lt;br /&gt;
    super(&amp;quot;Drag-and-Drop Web Browser&amp;quot;);&lt;br /&gt;
    toolBar = new WebToolBar(browserPane);&lt;br /&gt;
    browserPane.setDropTarget(new DropTarget(browserPane, DnDConstants.ACTION_COPY,&lt;br /&gt;
        new DropTargetHandler()));&lt;br /&gt;
    Container contentPane = getContentPane();&lt;br /&gt;
    contentPane.add(toolBar, BorderLayout.NORTH);&lt;br /&gt;
    contentPane.add(new JScrollPane(browserPane), BorderLayout.CENTER);&lt;br /&gt;
  }&lt;br /&gt;
  private class DropTargetHandler implements DropTargetListener {&lt;br /&gt;
    public void drop(DropTargetDropEvent event) {&lt;br /&gt;
      Transferable transferable = event.getTransferable();&lt;br /&gt;
      if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {&lt;br /&gt;
        event.acceptDrop(DnDConstants.ACTION_COPY);&lt;br /&gt;
        try {&lt;br /&gt;
          List fileList = (List) transferable.getTransferData(DataFlavor.javaFileListFlavor);&lt;br /&gt;
          Iterator iterator = fileList.iterator();&lt;br /&gt;
          while (iterator.hasNext()) {&lt;br /&gt;
            File file = (File) iterator.next();&lt;br /&gt;
            browserPane.goToURL(file.toURL());&lt;br /&gt;
          }&lt;br /&gt;
          event.dropComplete(true);&lt;br /&gt;
        } catch (UnsupportedFlavorException flavorException) {&lt;br /&gt;
          flavorException.printStackTrace();&lt;br /&gt;
          event.dropComplete(false);&lt;br /&gt;
        } catch (IOException ioException) {&lt;br /&gt;
          ioException.printStackTrace();&lt;br /&gt;
          event.dropComplete(false);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        event.rejectDrop();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    public void dragEnter(DropTargetDragEvent event) {&lt;br /&gt;
      if (event.isDataFlavorSupported(DataFlavor.javaFileListFlavor))&lt;br /&gt;
        event.acceptDrag(DnDConstants.ACTION_COPY);&lt;br /&gt;
      else {&lt;br /&gt;
        event.rejectDrag();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    public void dragExit(DropTargetEvent event) {&lt;br /&gt;
    }&lt;br /&gt;
    public void dragOver(DropTargetDragEvent event) {&lt;br /&gt;
    }&lt;br /&gt;
    public void dropActionChanged(DropTargetDragEvent event) {&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    DnDWebBrowser browser = new DnDWebBrowser();&lt;br /&gt;
    browser.setDefaultCloseOperation(EXIT_ON_CLOSE);&lt;br /&gt;
    browser.setSize(640, 480);&lt;br /&gt;
    browser.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class WebBrowserPane extends JEditorPane {&lt;br /&gt;
  private List history = new ArrayList();&lt;br /&gt;
  private int historyIndex;&lt;br /&gt;
  public WebBrowserPane() {&lt;br /&gt;
    setEditable(false);&lt;br /&gt;
  }&lt;br /&gt;
  public void goToURL(URL url) {&lt;br /&gt;
    displayPage(url);&lt;br /&gt;
    history.add(url);&lt;br /&gt;
    historyIndex = history.size() - 1;&lt;br /&gt;
  }&lt;br /&gt;
  public URL forward() {&lt;br /&gt;
    historyIndex++;&lt;br /&gt;
    if (historyIndex &amp;gt;= history.size())&lt;br /&gt;
      historyIndex = history.size() - 1;&lt;br /&gt;
    URL url = (URL) history.get(historyIndex);&lt;br /&gt;
    displayPage(url);&lt;br /&gt;
    return url;&lt;br /&gt;
  }&lt;br /&gt;
  public URL back() {&lt;br /&gt;
    historyIndex--;&lt;br /&gt;
    if (historyIndex &amp;lt; 0)&lt;br /&gt;
      historyIndex = 0;&lt;br /&gt;
    URL url = (URL) history.get(historyIndex);&lt;br /&gt;
    displayPage(url);&lt;br /&gt;
    return url;&lt;br /&gt;
  }&lt;br /&gt;
  private void displayPage(URL pageURL) {&lt;br /&gt;
    try {&lt;br /&gt;
      setPage(pageURL);&lt;br /&gt;
    } catch (IOException ioException) {&lt;br /&gt;
      ioException.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class WebToolBar extends JToolBar implements HyperlinkListener {&lt;br /&gt;
  private WebBrowserPane webBrowserPane;&lt;br /&gt;
  private JButton backButton;&lt;br /&gt;
  private JButton forwardButton;&lt;br /&gt;
  private JTextField urlTextField;&lt;br /&gt;
  public WebToolBar(WebBrowserPane browser) {&lt;br /&gt;
    super(&amp;quot;Web Navigation&amp;quot;);&lt;br /&gt;
    webBrowserPane = browser;&lt;br /&gt;
    webBrowserPane.addHyperlinkListener(this);&lt;br /&gt;
    urlTextField = new JTextField(25);&lt;br /&gt;
    urlTextField.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent event) {&lt;br /&gt;
        try {&lt;br /&gt;
          URL url = new URL(urlTextField.getText());&lt;br /&gt;
          webBrowserPane.goToURL(url);&lt;br /&gt;
        } catch (MalformedURLException urlException) {&lt;br /&gt;
          urlException.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    backButton = new JButton(&amp;quot;back&amp;quot;);&lt;br /&gt;
    backButton.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent event) {&lt;br /&gt;
        URL url = webBrowserPane.back();&lt;br /&gt;
        urlTextField.setText(url.toString());&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    forwardButton = new JButton(&amp;quot;forward&amp;quot;);&lt;br /&gt;
    forwardButton.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent event) {&lt;br /&gt;
        URL url = webBrowserPane.forward();&lt;br /&gt;
        urlTextField.setText(url.toString());&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    add(backButton);&lt;br /&gt;
    add(forwardButton);&lt;br /&gt;
    add(urlTextField);&lt;br /&gt;
  }&lt;br /&gt;
  public void hyperlinkUpdate(HyperlinkEvent event) {&lt;br /&gt;
    if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {&lt;br /&gt;
      URL url = event.getURL();&lt;br /&gt;
      webBrowserPane.goToURL(url);&lt;br /&gt;
      urlTextField.setText(url.toString());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MDI based web browser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Container;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
import javax.swing.AbstractAction;&lt;br /&gt;
import javax.swing.Action;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JDesktopPane;&lt;br /&gt;
import javax.swing.JEditorPane;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JInternalFrame;&lt;br /&gt;
import javax.swing.JMenu;&lt;br /&gt;
import javax.swing.JMenuBar;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
import javax.swing.JToolBar;&lt;br /&gt;
import javax.swing.event.HyperlinkEvent;&lt;br /&gt;
import javax.swing.event.HyperlinkListener;&lt;br /&gt;
public class MDIWebBrowser extends JFrame {&lt;br /&gt;
  JDesktopPane desktopPane = new JDesktopPane();&lt;br /&gt;
  public MDIWebBrowser() {&lt;br /&gt;
    super(&amp;quot;MDI Web Browser&amp;quot;);&lt;br /&gt;
    createNewWindow();&lt;br /&gt;
    Container contentPane = getContentPane();&lt;br /&gt;
    contentPane.add(desktopPane);&lt;br /&gt;
    JMenu fileMenu = new JMenu(&amp;quot;File&amp;quot;);&lt;br /&gt;
    fileMenu.add(new NewWindowAction());&lt;br /&gt;
    fileMenu.addSeparator();&lt;br /&gt;
    fileMenu.add(new ExitAction());&lt;br /&gt;
    fileMenu.setMnemonic(&amp;quot;F&amp;quot;);&lt;br /&gt;
    JMenuBar menuBar = new JMenuBar();&lt;br /&gt;
    menuBar.add(fileMenu);&lt;br /&gt;
    setJMenuBar(menuBar);&lt;br /&gt;
  }&lt;br /&gt;
  private void createNewWindow() {&lt;br /&gt;
    JInternalFrame frame = new JInternalFrame(&amp;quot;Browser&amp;quot;, // title&lt;br /&gt;
        true, // resizable&lt;br /&gt;
        true, // closable&lt;br /&gt;
        true, // maximizable&lt;br /&gt;
        true); // iconifiable&lt;br /&gt;
    WebBrowserPane browserPane = new WebBrowserPane();&lt;br /&gt;
    WebToolBar toolBar = new WebToolBar(browserPane);&lt;br /&gt;
    Container contentPane = frame.getContentPane();&lt;br /&gt;
    contentPane.add(toolBar, BorderLayout.NORTH);&lt;br /&gt;
    contentPane.add(new JScrollPane(browserPane), BorderLayout.CENTER);&lt;br /&gt;
    frame.setSize(320, 240);&lt;br /&gt;
    // move JInternalFrame to prevent it from obscuring others&lt;br /&gt;
    int offset = 30 * desktopPane.getAllFrames().length;&lt;br /&gt;
    frame.setLocation(offset, offset);&lt;br /&gt;
    desktopPane.add(frame);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  private class NewWindowAction extends AbstractAction {&lt;br /&gt;
    public NewWindowAction() {&lt;br /&gt;
      putValue(Action.NAME, &amp;quot;New Window&amp;quot;);&lt;br /&gt;
      putValue(Action.SHORT_DESCRIPTION, &amp;quot;Create New Web Browser Window&amp;quot;);&lt;br /&gt;
      putValue(Action.MNEMONIC_KEY, new Integer(&amp;quot;N&amp;quot;));&lt;br /&gt;
    }&lt;br /&gt;
    public void actionPerformed(ActionEvent event) {&lt;br /&gt;
      createNewWindow();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private class ExitAction extends AbstractAction {&lt;br /&gt;
    public ExitAction() {&lt;br /&gt;
      // set name, description and mnemonic key&lt;br /&gt;
      putValue(Action.NAME, &amp;quot;Exit&amp;quot;);&lt;br /&gt;
      putValue(Action.SHORT_DESCRIPTION, &amp;quot;Exit Application&amp;quot;);&lt;br /&gt;
      putValue(Action.MNEMONIC_KEY, new Integer(&amp;quot;x&amp;quot;));&lt;br /&gt;
    }&lt;br /&gt;
    public void actionPerformed(ActionEvent event) {&lt;br /&gt;
      System.exit(0);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    MDIWebBrowser browser = new MDIWebBrowser();&lt;br /&gt;
    browser.setDefaultCloseOperation(EXIT_ON_CLOSE);&lt;br /&gt;
    browser.setSize(640, 480);&lt;br /&gt;
    browser.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class WebToolBar extends JToolBar implements HyperlinkListener {&lt;br /&gt;
  private WebBrowserPane webBrowserPane;&lt;br /&gt;
  private JButton backButton;&lt;br /&gt;
  private JButton forwardButton;&lt;br /&gt;
  private JTextField urlTextField;&lt;br /&gt;
  public WebToolBar(WebBrowserPane browser) {&lt;br /&gt;
    super(&amp;quot;Web Navigation&amp;quot;);&lt;br /&gt;
    webBrowserPane = browser;&lt;br /&gt;
    webBrowserPane.addHyperlinkListener(this);&lt;br /&gt;
    urlTextField = new JTextField(25);&lt;br /&gt;
    urlTextField.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent event) {&lt;br /&gt;
        try {&lt;br /&gt;
          URL url = new URL(urlTextField.getText());&lt;br /&gt;
          webBrowserPane.goToURL(url);&lt;br /&gt;
        }catch (MalformedURLException urlException) {&lt;br /&gt;
          urlException.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    backButton = new JButton(&amp;quot;back&amp;quot;);&lt;br /&gt;
    backButton.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent event) {&lt;br /&gt;
        URL url = webBrowserPane.back();&lt;br /&gt;
        urlTextField.setText(url.toString());&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    forwardButton = new JButton(&amp;quot;forward&amp;quot;);&lt;br /&gt;
    forwardButton.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent event) {&lt;br /&gt;
        URL url = webBrowserPane.forward();&lt;br /&gt;
        urlTextField.setText(url.toString());&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    add(backButton);&lt;br /&gt;
    add(forwardButton);&lt;br /&gt;
    add(urlTextField);&lt;br /&gt;
  }&lt;br /&gt;
  public void hyperlinkUpdate(HyperlinkEvent event) {&lt;br /&gt;
    if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {&lt;br /&gt;
      URL url = event.getURL();&lt;br /&gt;
      webBrowserPane.goToURL(url);&lt;br /&gt;
      urlTextField.setText(url.toString());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class WebBrowserPane extends JEditorPane {&lt;br /&gt;
  private List history = new ArrayList();&lt;br /&gt;
  private int historyIndex;&lt;br /&gt;
  public WebBrowserPane() {&lt;br /&gt;
    setEditable(false);&lt;br /&gt;
  }&lt;br /&gt;
  public void goToURL(URL url) {&lt;br /&gt;
    displayPage(url);&lt;br /&gt;
    history.add(url);&lt;br /&gt;
    historyIndex = history.size() - 1;&lt;br /&gt;
  }&lt;br /&gt;
  public URL forward() {&lt;br /&gt;
    historyIndex++;&lt;br /&gt;
    if (historyIndex &amp;gt;= history.size())&lt;br /&gt;
      historyIndex = history.size() - 1;&lt;br /&gt;
    URL url = (URL) history.get(historyIndex);&lt;br /&gt;
    displayPage(url);&lt;br /&gt;
    return url;&lt;br /&gt;
  }&lt;br /&gt;
  public URL back() {&lt;br /&gt;
    historyIndex--;&lt;br /&gt;
    if (historyIndex &amp;lt; 0)&lt;br /&gt;
      historyIndex = 0;&lt;br /&gt;
    URL url = (URL) history.get(historyIndex);&lt;br /&gt;
    displayPage(url);&lt;br /&gt;
    return url;&lt;br /&gt;
  }&lt;br /&gt;
  private void displayPage(URL pageURL) {&lt;br /&gt;
    try {&lt;br /&gt;
      setPage(pageURL);&lt;br /&gt;
    }&lt;br /&gt;
    catch (IOException ioException) {&lt;br /&gt;
      ioException.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tabbed Web browser ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
import javax.swing.AbstractAction;&lt;br /&gt;
import javax.swing.Action;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JEditorPane;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JMenu;&lt;br /&gt;
import javax.swing.JMenuBar;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JScrollPane;&lt;br /&gt;
import javax.swing.JTabbedPane;&lt;br /&gt;
import javax.swing.JTextField;&lt;br /&gt;
import javax.swing.JToolBar;&lt;br /&gt;
import javax.swing.event.HyperlinkEvent;&lt;br /&gt;
import javax.swing.event.HyperlinkListener;&lt;br /&gt;
public class TabbedPaneWebBrowser extends JFrame {&lt;br /&gt;
  private JTabbedPane tabbedPane = new JTabbedPane();&lt;br /&gt;
  public TabbedPaneWebBrowser() {&lt;br /&gt;
    super(&amp;quot;JTabbedPane Web Browser&amp;quot;);&lt;br /&gt;
    createNewTab();&lt;br /&gt;
    getContentPane().add(tabbedPane);&lt;br /&gt;
    JMenu fileMenu = new JMenu(&amp;quot;File&amp;quot;);&lt;br /&gt;
    fileMenu.add(new NewTabAction());&lt;br /&gt;
    fileMenu.addSeparator();&lt;br /&gt;
    fileMenu.add(new ExitAction());&lt;br /&gt;
    fileMenu.setMnemonic(&amp;quot;F&amp;quot;);&lt;br /&gt;
    JMenuBar menuBar = new JMenuBar();&lt;br /&gt;
    menuBar.add(fileMenu);&lt;br /&gt;
    setJMenuBar(menuBar);&lt;br /&gt;
  }&lt;br /&gt;
  private void createNewTab() {&lt;br /&gt;
    JPanel panel = new JPanel(new BorderLayout());&lt;br /&gt;
    WebBrowserPane browserPane = new WebBrowserPane();&lt;br /&gt;
    WebToolBar toolBar = new WebToolBar(browserPane);&lt;br /&gt;
    panel.add(toolBar, BorderLayout.NORTH);&lt;br /&gt;
    panel.add(new JScrollPane(browserPane), BorderLayout.CENTER);&lt;br /&gt;
    tabbedPane.addTab(&amp;quot;Browser &amp;quot; + tabbedPane.getTabCount(), panel);&lt;br /&gt;
  }&lt;br /&gt;
  private class NewTabAction extends AbstractAction {&lt;br /&gt;
    public NewTabAction() {&lt;br /&gt;
      putValue(Action.NAME, &amp;quot;New Browser Tab&amp;quot;);&lt;br /&gt;
      putValue(Action.SHORT_DESCRIPTION, &amp;quot;Create New Web Browser Tab&amp;quot;);&lt;br /&gt;
      putValue(Action.MNEMONIC_KEY, new Integer(&amp;quot;N&amp;quot;));&lt;br /&gt;
    }&lt;br /&gt;
    public void actionPerformed(ActionEvent event) {&lt;br /&gt;
      createNewTab();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private class ExitAction extends AbstractAction {&lt;br /&gt;
    public ExitAction() {&lt;br /&gt;
      putValue(Action.NAME, &amp;quot;Exit&amp;quot;);&lt;br /&gt;
      putValue(Action.SHORT_DESCRIPTION, &amp;quot;Exit Application&amp;quot;);&lt;br /&gt;
      putValue(Action.MNEMONIC_KEY, new Integer(&amp;quot;x&amp;quot;));&lt;br /&gt;
    }&lt;br /&gt;
    public void actionPerformed(ActionEvent event) {&lt;br /&gt;
      System.exit(0);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    TabbedPaneWebBrowser browser = new TabbedPaneWebBrowser();&lt;br /&gt;
    browser.setDefaultCloseOperation(EXIT_ON_CLOSE);&lt;br /&gt;
    browser.setSize(640, 480);&lt;br /&gt;
    browser.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class WebBrowserPane extends JEditorPane {&lt;br /&gt;
  private List history = new ArrayList();&lt;br /&gt;
  private int historyIndex;&lt;br /&gt;
  public WebBrowserPane() {&lt;br /&gt;
    setEditable(false);&lt;br /&gt;
  }&lt;br /&gt;
  public void goToURL(URL url) {&lt;br /&gt;
    displayPage(url);&lt;br /&gt;
    history.add(url);&lt;br /&gt;
    historyIndex = history.size() - 1;&lt;br /&gt;
  }&lt;br /&gt;
  public URL forward() {&lt;br /&gt;
    historyIndex++;&lt;br /&gt;
    if (historyIndex &amp;gt;= history.size())&lt;br /&gt;
      historyIndex = history.size() - 1;&lt;br /&gt;
    URL url = (URL) history.get(historyIndex);&lt;br /&gt;
    displayPage(url);&lt;br /&gt;
    return url;&lt;br /&gt;
  }&lt;br /&gt;
  public URL back() {&lt;br /&gt;
    historyIndex--;&lt;br /&gt;
    if (historyIndex &amp;lt; 0)&lt;br /&gt;
      historyIndex = 0;&lt;br /&gt;
    URL url = (URL) history.get(historyIndex);&lt;br /&gt;
    displayPage(url);&lt;br /&gt;
    return url;&lt;br /&gt;
  }&lt;br /&gt;
  private void displayPage(URL pageURL) {&lt;br /&gt;
    try {&lt;br /&gt;
      setPage(pageURL);&lt;br /&gt;
    } catch (IOException ioException) {&lt;br /&gt;
      ioException.printStackTrace();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class WebToolBar extends JToolBar implements HyperlinkListener {&lt;br /&gt;
  private WebBrowserPane webBrowserPane;&lt;br /&gt;
  private JButton backButton;&lt;br /&gt;
  private JButton forwardButton;&lt;br /&gt;
  private JTextField urlTextField;&lt;br /&gt;
  public WebToolBar(WebBrowserPane browser) {&lt;br /&gt;
    super(&amp;quot;Web Navigation&amp;quot;);&lt;br /&gt;
    // register for HyperlinkEvents&lt;br /&gt;
    webBrowserPane = browser;&lt;br /&gt;
    webBrowserPane.addHyperlinkListener(this);&lt;br /&gt;
    urlTextField = new JTextField(25);&lt;br /&gt;
    urlTextField.addActionListener(new ActionListener() {&lt;br /&gt;
      // navigate webBrowser to user-entered URL&lt;br /&gt;
      public void actionPerformed(ActionEvent event) {&lt;br /&gt;
        try {&lt;br /&gt;
          URL url = new URL(urlTextField.getText());&lt;br /&gt;
          webBrowserPane.goToURL(url);&lt;br /&gt;
        }&lt;br /&gt;
        catch (MalformedURLException urlException) {&lt;br /&gt;
          urlException.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    backButton = new JButton(&amp;quot;back&amp;quot;);&lt;br /&gt;
    backButton.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent event) {&lt;br /&gt;
        URL url = webBrowserPane.back();&lt;br /&gt;
        urlTextField.setText(url.toString());&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    forwardButton = new JButton(&amp;quot;forward&amp;quot;);&lt;br /&gt;
    forwardButton.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent event) {&lt;br /&gt;
        URL url = webBrowserPane.forward();&lt;br /&gt;
        urlTextField.setText(url.toString());&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    add(backButton);&lt;br /&gt;
    add(forwardButton);&lt;br /&gt;
    add(urlTextField);&lt;br /&gt;
  }&lt;br /&gt;
  public void hyperlinkUpdate(HyperlinkEvent event) {&lt;br /&gt;
    if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {&lt;br /&gt;
      URL url = event.getURL();&lt;br /&gt;
      webBrowserPane.goToURL(url);&lt;br /&gt;
      urlTextField.setText(url.toString());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>