Java/Tiny Application/Browser

Материал из Java эксперт
Перейти к: навигация, поиск

Brower based on JEditorPane

   <source lang="java">

import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.net.URL; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ruboBoxModel; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JComboBox; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; public class Browser extends JFrame {

 protected JEditorPane m_browser;
 protected MemComboBox m_locator = new MemComboBox();
 public Browser() {
   super("HTML Browser");
   setSize(500, 300);
   getContentPane().setLayout(new BorderLayout());
   JPanel p = new JPanel();
   p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
   p.add(new JLabel("Address"));
   m_locator.load("addresses.dat");
   BrowserListener lst = new BrowserListener();
   m_locator.addActionListener(lst);
   MemComboAgent agent = new MemComboAgent(m_locator);
   p.add(m_locator);
   getContentPane().add(p, BorderLayout.NORTH);
   m_browser = new JEditorPane();
   m_browser.setEditable(false);
   m_browser.addHyperlinkListener(lst);
   JScrollPane sp = new JScrollPane();
   sp.getViewport().add(m_browser);
   getContentPane().add(sp, BorderLayout.CENTER);
   WindowListener wndCloser = new WindowAdapter() {
     public void windowClosing(WindowEvent e) {
       m_locator.save("addresses.dat");
       System.exit(0);
     }
   };
   addWindowListener(wndCloser);
   setVisible(true);
   m_locator.grabFocus();
 }
 class BrowserListener implements ActionListener, HyperlinkListener {
   public void actionPerformed(ActionEvent evt) {
     String sUrl = (String) m_locator.getSelectedItem();
     if (sUrl == null || sUrl.length() == 0 )
       return;
     BrowserLoader loader = new BrowserLoader(sUrl);
     loader.start();
   }
   public void hyperlinkUpdate(HyperlinkEvent e) {
     URL url = e.getURL();
     if (url == null )
       return;
     BrowserLoader loader = new BrowserLoader(url.toString());
     loader.start();
   }
 }
 class BrowserLoader extends Thread {
   protected String m_sUrl;
   public BrowserLoader(String sUrl) {
     m_sUrl = sUrl;
   }
   public void run() {
     setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
     try {
       URL source = new URL(m_sUrl);
       m_browser.setPage(source);
       m_locator.add(m_sUrl);
     } catch (Exception e) {
       JOptionPane.showMessageDialog(Browser.this, "Error: "
           + e.toString(), "Warning", JOptionPane.WARNING_MESSAGE);
     }
     setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
   }
 }
 public static void main(String argv[]) {
   new Browser();
 }

} class MemComboAgent extends KeyAdapter {

 protected JComboBox m_comboBox;
 protected JTextField m_editor;
 public MemComboAgent(JComboBox comboBox) {
   m_comboBox = comboBox;
   m_editor = (JTextField) comboBox.getEditor().getEditorComponent();
   m_editor.addKeyListener(this);
 }
 public void keyReleased(KeyEvent e) {
   char ch = e.getKeyChar();
   if (ch == KeyEvent.CHAR_UNDEFINED || Character.isISOControl(ch))
     return;
   int pos = m_editor.getCaretPosition();
   String str = m_editor.getText();
   if (str.length() == 0)
     return;
   for (int k = 0; k < m_comboBox.getItemCount(); k++) {
     String item = m_comboBox.getItemAt(k).toString();
     if (item.startsWith(str)) {
       m_editor.setText(item);
       m_editor.setCaretPosition(item.length());
       m_editor.moveCaretPosition(pos);
       break;
     }
   }
 }

} class MemComboBox extends JComboBox {

 public static final int MAX_MEM_LEN = 30;
 public MemComboBox() {
   super();
   setEditable(true);
 }
 public void add(String item) {
   removeItem(item);
   insertItemAt(item, 0);
   setSelectedItem(item);
   if (getItemCount() > MAX_MEM_LEN)
     removeItemAt(getItemCount() - 1);
 }
 public void load(String fName) {
   try {
     if (getItemCount() > 0)
       removeAllItems();
     File f = new File(fName);
     if (!f.exists())
       return;
     FileInputStream fStream = new FileInputStream(f);
     ObjectInput stream = new ObjectInputStream(fStream);
     Object obj = stream.readObject();
     if (obj instanceof ComboBoxModel)
       setModel((ComboBoxModel) obj);
     stream.close();
     fStream.close();
   } catch (Exception e) {
     System.err.println("Serialization error: " + e.toString());
   }
 }
 public void save(String fName) {
   try {
     FileOutputStream fStream = new FileOutputStream(fName);
     ObjectOutput stream = new ObjectOutputStream(fStream);
     stream.writeObject(getModel());
     stream.flush();
     stream.close();
     fStream.close();
   } catch (Exception e) {
     System.err.println("Serialization error: " + e.toString());
   }
 }

}

      </source>
   
  
 
  



Drag and drop web browser

   <source lang="java">

import java.awt.BorderLayout; import java.awt.Container; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; import java.awt.dnd.DropTargetListener; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JToolBar; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; public class DnDWebBrowser extends JFrame {

 private WebToolBar toolBar;
 private WebBrowserPane browserPane = new WebBrowserPane();
 public DnDWebBrowser() {
   super("Drag-and-Drop Web Browser");
   toolBar = new WebToolBar(browserPane);
   browserPane.setDropTarget(new DropTarget(browserPane, DnDConstants.ACTION_COPY,
       new DropTargetHandler()));
   Container contentPane = getContentPane();
   contentPane.add(toolBar, BorderLayout.NORTH);
   contentPane.add(new JScrollPane(browserPane), BorderLayout.CENTER);
 }
 private class DropTargetHandler implements DropTargetListener {
   public void drop(DropTargetDropEvent event) {
     Transferable transferable = event.getTransferable();
     if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
       event.acceptDrop(DnDConstants.ACTION_COPY);
       try {
         List fileList = (List) transferable.getTransferData(DataFlavor.javaFileListFlavor);
         Iterator iterator = fileList.iterator();
         while (iterator.hasNext()) {
           File file = (File) iterator.next();
           browserPane.goToURL(file.toURL());
         }
         event.dropComplete(true);
       } catch (UnsupportedFlavorException flavorException) {
         flavorException.printStackTrace();
         event.dropComplete(false);
       } catch (IOException ioException) {
         ioException.printStackTrace();
         event.dropComplete(false);
       }
     } else {
       event.rejectDrop();
     }
   }
   public void dragEnter(DropTargetDragEvent event) {
     if (event.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
       event.acceptDrag(DnDConstants.ACTION_COPY);
     else {
       event.rejectDrag();
     }
   }
   public void dragExit(DropTargetEvent event) {
   }
   public void dragOver(DropTargetDragEvent event) {
   }
   public void dropActionChanged(DropTargetDragEvent event) {
   }
 }
 public static void main(String args[]) {
   DnDWebBrowser browser = new DnDWebBrowser();
   browser.setDefaultCloseOperation(EXIT_ON_CLOSE);
   browser.setSize(640, 480);
   browser.setVisible(true);
 }

} class WebBrowserPane extends JEditorPane {

 private List history = new ArrayList();
 private int historyIndex;
 public WebBrowserPane() {
   setEditable(false);
 }
 public void goToURL(URL url) {
   displayPage(url);
   history.add(url);
   historyIndex = history.size() - 1;
 }
 public URL forward() {
   historyIndex++;
   if (historyIndex >= history.size())
     historyIndex = history.size() - 1;
   URL url = (URL) history.get(historyIndex);
   displayPage(url);
   return url;
 }
 public URL back() {
   historyIndex--;
   if (historyIndex < 0)
     historyIndex = 0;
   URL url = (URL) history.get(historyIndex);
   displayPage(url);
   return url;
 }
 private void displayPage(URL pageURL) {
   try {
     setPage(pageURL);
   } catch (IOException ioException) {
     ioException.printStackTrace();
   }
 }

} class WebToolBar extends JToolBar implements HyperlinkListener {

 private WebBrowserPane webBrowserPane;
 private JButton backButton;
 private JButton forwardButton;
 private JTextField urlTextField;
 public WebToolBar(WebBrowserPane browser) {
   super("Web Navigation");
   webBrowserPane = browser;
   webBrowserPane.addHyperlinkListener(this);
   urlTextField = new JTextField(25);
   urlTextField.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent event) {
       try {
         URL url = new URL(urlTextField.getText());
         webBrowserPane.goToURL(url);
       } catch (MalformedURLException urlException) {
         urlException.printStackTrace();
       }
     }
   });
   backButton = new JButton("back");
   backButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent event) {
       URL url = webBrowserPane.back();
       urlTextField.setText(url.toString());
     }
   });
   forwardButton = new JButton("forward");
   forwardButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent event) {
       URL url = webBrowserPane.forward();
       urlTextField.setText(url.toString());
     }
   });
   add(backButton);
   add(forwardButton);
   add(urlTextField);
 }
 public void hyperlinkUpdate(HyperlinkEvent event) {
   if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
     URL url = event.getURL();
     webBrowserPane.goToURL(url);
     urlTextField.setText(url.toString());
   }
 }

}

      </source>
   
  
 
  



MDI based web browser

   <source lang="java">

import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JDesktopPane; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JToolBar; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; public class MDIWebBrowser extends JFrame {

 JDesktopPane desktopPane = new JDesktopPane();
 public MDIWebBrowser() {
   super("MDI Web Browser");
   createNewWindow();
   Container contentPane = getContentPane();
   contentPane.add(desktopPane);
   JMenu fileMenu = new JMenu("File");
   fileMenu.add(new NewWindowAction());
   fileMenu.addSeparator();
   fileMenu.add(new ExitAction());
   fileMenu.setMnemonic("F");
   JMenuBar menuBar = new JMenuBar();
   menuBar.add(fileMenu);
   setJMenuBar(menuBar);
 }
 private void createNewWindow() {
   JInternalFrame frame = new JInternalFrame("Browser", // title
       true, // resizable
       true, // closable
       true, // maximizable
       true); // iconifiable
   WebBrowserPane browserPane = new WebBrowserPane();
   WebToolBar toolBar = new WebToolBar(browserPane);
   Container contentPane = frame.getContentPane();
   contentPane.add(toolBar, BorderLayout.NORTH);
   contentPane.add(new JScrollPane(browserPane), BorderLayout.CENTER);
   frame.setSize(320, 240);
   // move JInternalFrame to prevent it from obscuring others
   int offset = 30 * desktopPane.getAllFrames().length;
   frame.setLocation(offset, offset);
   desktopPane.add(frame);
   frame.setVisible(true);
 }
 private class NewWindowAction extends AbstractAction {
   public NewWindowAction() {
     putValue(Action.NAME, "New Window");
     putValue(Action.SHORT_DESCRIPTION, "Create New Web Browser Window");
     putValue(Action.MNEMONIC_KEY, new Integer("N"));
   }
   public void actionPerformed(ActionEvent event) {
     createNewWindow();
   }
 }
 private class ExitAction extends AbstractAction {
   public ExitAction() {
     // set name, description and mnemonic key
     putValue(Action.NAME, "Exit");
     putValue(Action.SHORT_DESCRIPTION, "Exit Application");
     putValue(Action.MNEMONIC_KEY, new Integer("x"));
   }
   public void actionPerformed(ActionEvent event) {
     System.exit(0);
   }
 }
 public static void main(String args[]) {
   MDIWebBrowser browser = new MDIWebBrowser();
   browser.setDefaultCloseOperation(EXIT_ON_CLOSE);
   browser.setSize(640, 480);
   browser.setVisible(true);
 }

} class WebToolBar extends JToolBar implements HyperlinkListener {

 private WebBrowserPane webBrowserPane;
 private JButton backButton;
 private JButton forwardButton;
 private JTextField urlTextField;
 public WebToolBar(WebBrowserPane browser) {
   super("Web Navigation");
   webBrowserPane = browser;
   webBrowserPane.addHyperlinkListener(this);
   urlTextField = new JTextField(25);
   urlTextField.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent event) {
       try {
         URL url = new URL(urlTextField.getText());
         webBrowserPane.goToURL(url);
       }catch (MalformedURLException urlException) {
         urlException.printStackTrace();
       }
     }
   });
   backButton = new JButton("back");
   backButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent event) {
       URL url = webBrowserPane.back();
       urlTextField.setText(url.toString());
     }
   });
   forwardButton = new JButton("forward");
   forwardButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent event) {
       URL url = webBrowserPane.forward();
       urlTextField.setText(url.toString());
     }
   });
   add(backButton);
   add(forwardButton);
   add(urlTextField);
 }
 public void hyperlinkUpdate(HyperlinkEvent event) {
   if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
     URL url = event.getURL();
     webBrowserPane.goToURL(url);
     urlTextField.setText(url.toString());
   }
 }

} class WebBrowserPane extends JEditorPane {

 private List history = new ArrayList();
 private int historyIndex;
 public WebBrowserPane() {
   setEditable(false);
 }
 public void goToURL(URL url) {
   displayPage(url);
   history.add(url);
   historyIndex = history.size() - 1;
 }
 public URL forward() {
   historyIndex++;
   if (historyIndex >= history.size())
     historyIndex = history.size() - 1;
   URL url = (URL) history.get(historyIndex);
   displayPage(url);
   return url;
 }
 public URL back() {
   historyIndex--;
   if (historyIndex < 0)
     historyIndex = 0;
   URL url = (URL) history.get(historyIndex);
   displayPage(url);
   return url;
 }
 private void displayPage(URL pageURL) {
   try {
     setPage(pageURL);
   }
   catch (IOException ioException) {
     ioException.printStackTrace();
   }
 }

}

      </source>
   
  
 
  



Tabbed Web browser

   <source lang="java">

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JButton; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTextField; import javax.swing.JToolBar; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; public class TabbedPaneWebBrowser extends JFrame {

 private JTabbedPane tabbedPane = new JTabbedPane();
 public TabbedPaneWebBrowser() {
   super("JTabbedPane Web Browser");
   createNewTab();
   getContentPane().add(tabbedPane);
   JMenu fileMenu = new JMenu("File");
   fileMenu.add(new NewTabAction());
   fileMenu.addSeparator();
   fileMenu.add(new ExitAction());
   fileMenu.setMnemonic("F");
   JMenuBar menuBar = new JMenuBar();
   menuBar.add(fileMenu);
   setJMenuBar(menuBar);
 }
 private void createNewTab() {
   JPanel panel = new JPanel(new BorderLayout());
   WebBrowserPane browserPane = new WebBrowserPane();
   WebToolBar toolBar = new WebToolBar(browserPane);
   panel.add(toolBar, BorderLayout.NORTH);
   panel.add(new JScrollPane(browserPane), BorderLayout.CENTER);
   tabbedPane.addTab("Browser " + tabbedPane.getTabCount(), panel);
 }
 private class NewTabAction extends AbstractAction {
   public NewTabAction() {
     putValue(Action.NAME, "New Browser Tab");
     putValue(Action.SHORT_DESCRIPTION, "Create New Web Browser Tab");
     putValue(Action.MNEMONIC_KEY, new Integer("N"));
   }
   public void actionPerformed(ActionEvent event) {
     createNewTab();
   }
 }
 private class ExitAction extends AbstractAction {
   public ExitAction() {
     putValue(Action.NAME, "Exit");
     putValue(Action.SHORT_DESCRIPTION, "Exit Application");
     putValue(Action.MNEMONIC_KEY, new Integer("x"));
   }
   public void actionPerformed(ActionEvent event) {
     System.exit(0);
   }
 }
 public static void main(String args[]) {
   TabbedPaneWebBrowser browser = new TabbedPaneWebBrowser();
   browser.setDefaultCloseOperation(EXIT_ON_CLOSE);
   browser.setSize(640, 480);
   browser.setVisible(true);
 }

} class WebBrowserPane extends JEditorPane {

 private List history = new ArrayList();
 private int historyIndex;
 public WebBrowserPane() {
   setEditable(false);
 }
 public void goToURL(URL url) {
   displayPage(url);
   history.add(url);
   historyIndex = history.size() - 1;
 }
 public URL forward() {
   historyIndex++;
   if (historyIndex >= history.size())
     historyIndex = history.size() - 1;
   URL url = (URL) history.get(historyIndex);
   displayPage(url);
   return url;
 }
 public URL back() {
   historyIndex--;
   if (historyIndex < 0)
     historyIndex = 0;
   URL url = (URL) history.get(historyIndex);
   displayPage(url);
   return url;
 }
 private void displayPage(URL pageURL) {
   try {
     setPage(pageURL);
   } catch (IOException ioException) {
     ioException.printStackTrace();
   }
 }

} class WebToolBar extends JToolBar implements HyperlinkListener {

 private WebBrowserPane webBrowserPane;
 private JButton backButton;
 private JButton forwardButton;
 private JTextField urlTextField;
 public WebToolBar(WebBrowserPane browser) {
   super("Web Navigation");
   // register for HyperlinkEvents
   webBrowserPane = browser;
   webBrowserPane.addHyperlinkListener(this);
   urlTextField = new JTextField(25);
   urlTextField.addActionListener(new ActionListener() {
     // navigate webBrowser to user-entered URL
     public void actionPerformed(ActionEvent event) {
       try {
         URL url = new URL(urlTextField.getText());
         webBrowserPane.goToURL(url);
       }
       catch (MalformedURLException urlException) {
         urlException.printStackTrace();
       }
     }
   });
   backButton = new JButton("back");
   backButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent event) {
       URL url = webBrowserPane.back();
       urlTextField.setText(url.toString());
     }
   });
   forwardButton = new JButton("forward");
   forwardButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent event) {
       URL url = webBrowserPane.forward();
       urlTextField.setText(url.toString());
     }
   });
   add(backButton);
   add(forwardButton);
   add(urlTextField);
 }
 public void hyperlinkUpdate(HyperlinkEvent event) {
   if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
     URL url = event.getURL();
     webBrowserPane.goToURL(url);
     urlTextField.setText(url.toString());
   }
 }

}

      </source>