Java/Tiny Application/Browser
Содержание
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>