summaryrefslogtreecommitdiff
path: root/examples/gnu/classpath/examples/swing/HtmlDemo.java
diff options
context:
space:
mode:
Diffstat (limited to 'examples/gnu/classpath/examples/swing/HtmlDemo.java')
-rw-r--r--examples/gnu/classpath/examples/swing/HtmlDemo.java215
1 files changed, 194 insertions, 21 deletions
diff --git a/examples/gnu/classpath/examples/swing/HtmlDemo.java b/examples/gnu/classpath/examples/swing/HtmlDemo.java
index 4cbf3ce47..35a9df290 100644
--- a/examples/gnu/classpath/examples/swing/HtmlDemo.java
+++ b/examples/gnu/classpath/examples/swing/HtmlDemo.java
@@ -43,19 +43,28 @@ 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.
@@ -74,11 +83,11 @@ public class HtmlDemo extends JPanel
String urlStr = url.getText();
try
{
- html.setPage(url.getText());
+ setPage(new URL(url.getText()));
}
- catch (IOException ex)
+ catch (MalformedURLException ex)
{
- System.err.println("exception while loading: " + ex);
+ // Do something more useful here.
ex.printStackTrace();
}
}
@@ -98,10 +107,17 @@ public class HtmlDemo extends JPanel
int n;
+ /**
+ * The browsing history.
+ *
+ * Package private to avoid accessor method.
+ */
+ LinkedList history;
+
public HtmlDemo()
{
super();
- html.setContentType("text/html"); // not now.
+ history = new LinkedList();
createContent();
}
@@ -115,23 +131,24 @@ public class HtmlDemo extends JPanel
{
setLayout(new BorderLayout());
+ JEditorPane.registerEditorKitForContentType("text/html",
+ BrowserEditorKit.class.getName());
html.setEditable(false);
html.addHyperlinkListener(new HyperlinkListener()
{
public void hyperlinkUpdate(HyperlinkEvent event)
{
- URL u = event.getURL();
- if (u != null)
+ if (event instanceof FormSubmitEvent)
{
- url.setText(u.toString());
- try
- {
- html.setPage(u);
- }
- catch (IOException ex)
+ submitForm((FormSubmitEvent) event);
+ }
+ else
+ {
+ URL u = event.getURL();
+ if (u != null)
{
- ex.printStackTrace();
+ setPage(u);
}
}
}
@@ -148,24 +165,93 @@ public class HtmlDemo extends JPanel
JButton loadButton = new JButton("go");
urlPanel.add(loadButton);
loadButton.addActionListener(action);
- add(urlPanel, BorderLayout.NORTH);
- add(scroller, BorderLayout.CENTER);
+
+ // 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.
- URL startpage = getClass().getResource("welcome.html");
try
{
+ URL startpage = getClass().getResource("welcome.html");
html.setPage(startpage);
url.setText(startpage.toString());
+ history.addLast(startpage);
}
- catch (IOException ex)
+ catch (Exception ex)
{
- System.err.println("couldn't load page: " + startpage);
+ System.err.println("couldn't load page: "/* + startpage*/);
+ ex.printStackTrace();
}
-
- setPreferredSize(new Dimension(600, 400));
+ 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.
*
@@ -182,13 +268,100 @@ public class HtmlDemo extends JPanel
HtmlDemo demo = new HtmlDemo();
JFrame frame = new JFrame();
frame.getContentPane().add(demo);
- frame.setSize(new Dimension(700, 480));
+ 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.toString());
+ 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