diff options
Diffstat (limited to 'gcc-4.4.3/libjava/classpath/examples/gnu/classpath/examples/swing/HtmlDemo.java')
-rw-r--r-- | gcc-4.4.3/libjava/classpath/examples/gnu/classpath/examples/swing/HtmlDemo.java | 380 |
1 files changed, 380 insertions, 0 deletions
diff --git a/gcc-4.4.3/libjava/classpath/examples/gnu/classpath/examples/swing/HtmlDemo.java b/gcc-4.4.3/libjava/classpath/examples/gnu/classpath/examples/swing/HtmlDemo.java new file mode 100644 index 000000000..1a24ae276 --- /dev/null +++ b/gcc-4.4.3/libjava/classpath/examples/gnu/classpath/examples/swing/HtmlDemo.java @@ -0,0 +1,380 @@ +/* HtmlDemo.java -- HTML viewer demo + Copyright (C) 2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package gnu.classpath.examples.swing; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.LinkedList; + +import javax.swing.BoxLayout; +import javax.swing.Icon; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JEditorPane; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextField; +import javax.swing.JTextPane; +import javax.swing.JToolBar; +import javax.swing.SwingUtilities; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; +import javax.swing.text.html.FormSubmitEvent; + +/** + * Parses and displays HTML content. + * + * @author Audrius Meskauskas (audriusa@bioinformatics.org) + */ +public class HtmlDemo extends JPanel +{ + + private class LoadActionListener + implements ActionListener + { + + public void actionPerformed(ActionEvent event) + { + String urlStr = url.getText(); + try + { + setPage(new URL(url.getText())); + } + catch (MalformedURLException ex) + { + // Do something more useful here. + ex.printStackTrace(); + } + } + } + + /** + * Setting this to true causes the parsed element structure to be dumped. + */ + private static final boolean DEBUG = true; + + /** + * The URL entry field. + */ + JTextField url = new JTextField(); + + JTextPane html = new JTextPane(); + + int n; + + /** + * The browsing history. + * + * Package private to avoid accessor method. + */ + LinkedList history; + + public HtmlDemo() + { + super(); + history = new LinkedList(); + createContent(); + } + + /** + * Returns a panel with the demo content. The panel uses a BorderLayout(), and + * the BorderLayout.SOUTH area is empty, to allow callers to add controls to + * the bottom of the panel if they want to (a close button is added if this + * demo is being run as a standalone demo). + */ + private void createContent() + { + setLayout(new BorderLayout()); + + JEditorPane.registerEditorKitForContentType("text/html", + BrowserEditorKit.class.getName()); + html.setEditable(false); + html.addHyperlinkListener(new HyperlinkListener() + { + + public void hyperlinkUpdate(HyperlinkEvent event) + { + if (event instanceof FormSubmitEvent) + { + submitForm((FormSubmitEvent) event); + } + else + { + URL u = event.getURL(); + if (u != null) + { + setPage(u); + } + } + } + + }); + + JScrollPane scroller = new JScrollPane(html); + JPanel urlPanel = new JPanel(); + urlPanel.setLayout(new BoxLayout(urlPanel, BoxLayout.X_AXIS)); + url.setMaximumSize(new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE)); + LoadActionListener action = new LoadActionListener(); + url.addActionListener(action); + urlPanel.add(url); + JButton loadButton = new JButton("go"); + urlPanel.add(loadButton); + loadButton.addActionListener(action); + + // Setup control panel. + JToolBar controlPanel = createToolBar(); + JPanel browserPanel = new JPanel(); + browserPanel.setLayout(new BorderLayout()); + browserPanel.add(urlPanel, BorderLayout.NORTH); + browserPanel.add(scroller, BorderLayout.CENTER); + add(controlPanel, BorderLayout.NORTH); + add(browserPanel, BorderLayout.CENTER); + + // Load start page. + try + { + URL startpage = getClass().getResource("welcome.html"); + html.setPage(startpage); + url.setText(startpage.toString()); + history.addLast(startpage); + } + catch (Exception ex) + { + System.err.println("couldn't load page: "/* + startpage*/); + ex.printStackTrace(); + } + setPreferredSize(new Dimension(800, 600)); + } + + + /** + * Creates the toolbar with the control buttons. + * + * @return the toolbar with the control buttons + */ + JToolBar createToolBar() + { + JToolBar tb = new JToolBar(); + Icon backIcon = Demo.getIcon("/gnu/classpath/examples/icons/back.png", + "back"); + JButton back = new JButton(backIcon); + back.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent ev) + { + if (history.size() > 1) + { + URL last = (URL) history.removeLast(); + last = (URL) history.getLast(); + url.setText(last.toString()); + try + { + html.setPage(last); + } + catch (IOException ex) + { + // Do something more useful. + ex.printStackTrace(); + } + } + } + }); + tb.add(back); + Icon reloadIcon = Demo.getIcon("/gnu/classpath/examples/icons/reload.png", + "reload"); + JButton reload = new JButton(reloadIcon); + reload.addActionListener(new ActionListener() + { + public void actionPerformed(ActionEvent ev) + { + if (history.size() > 0) + { + URL last = (URL) history.getLast(); + url.setText(last.toString()); + try + { + html.setPage(last); + } + catch (IOException ex) + { + // Do something more useful. + ex.printStackTrace(); + } + } + } + }); + tb.add(reload); + return tb; + } + + /** + * The executable method to display the editable table. + * + * @param args + * unused. + */ + public static void main(String[] args) + { + SwingUtilities.invokeLater + (new Runnable() + { + public void run() + { + HtmlDemo demo = new HtmlDemo(); + JFrame frame = new JFrame(); + frame.getContentPane().add(demo); + frame.setSize(new Dimension(750, 480)); + frame.setVisible(true); + } + }); + } + + /** + * Helper method to navigate to a new URL. + * + * @param u the new URL to navigate to + */ + void setPage(URL u) + { + try + { + url.setText(u.toString()); + html.setPage(u); + history.addLast(u); + } + catch (IOException ex) + { + // Do something more useful here. + ex.printStackTrace(); + } + } + + /** + * Submits a form when a FormSubmitEvent is received. The HTML API + * provides automatic form submit but when this is enabled we don't + * receive any notification and can't update our location field. + * + * @param ev the form submit event + */ + void submitForm(FormSubmitEvent ev) + { + URL url = ev.getURL(); + String data = ev.getData(); + FormSubmitEvent.MethodType method = ev.getMethod(); + if (method == FormSubmitEvent.MethodType.POST) + { + try + { + URLConnection conn = url.openConnection(); + postData(conn, data); + } + catch (IOException ex) + { + // Deal with this. + ex.printStackTrace(); + } + } + else + { + try + { + url = new URL(url.toString() + "?" + data); + } + catch (MalformedURLException ex) + { + ex.printStackTrace(); + } + } + setPage(url); + } + + /** + * Posts the form data for forms with HTTP POST method. + * + * @param conn the connection + * @param data the form data + */ + private void postData(URLConnection conn, String data) + { + conn.setDoOutput(true); + PrintWriter out = null; + try + { + out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream())); + out.print(data); + out.flush(); + } + catch (IOException ex) + { + // Deal with this! + ex.printStackTrace(); + } + finally + { + if (out != null) + out.close(); + } + } + + /** + * Returns a DemoFactory that creates a HtmlDemo. + * + * @return a DemoFactory that creates a HtmlDemo + */ + public static DemoFactory createDemoFactory() + { + return new DemoFactory() + { + public JComponent createDemo() + { + return new HtmlDemo(); + } + }; + } +} + |