刚刚花了些时间写了个网页查看的工具。
import java.io.IOException;
import java.net.MalformedURLException;/**
 * 
 * @author Robert Lai
 */
public class Browser extends javax.swing.JFrame { /**
 * 
 */
private static final long serialVersionUID = 1L; /** Creates new form Browser */
public Browser() {
initComponents();
} /**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
// GEN-BEGIN:initComponents
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() { contentJScrollPane = new javax.swing.JScrollPane();
contentJEditorPane = new javax.swing.JEditorPane();
addressJPanel = new javax.swing.JPanel();
addressJTextField = new javax.swing.JTextField();
backJButton = new javax.swing.JButton();
homeJButton = new javax.swing.JButton();
goJButton = new javax.swing.JButton();
statusJLabel = new javax.swing.JLabel(); addressVector = new java.util.Vector<java.net.URL>(); contentJEditorPane.setContentType("text/html;charset=GBK");
contentJEditorPane
.addHyperlinkListener(new javax.swing.event.HyperlinkListener() {
public void hyperlinkUpdate(
javax.swing.event.HyperlinkEvent evt) {
contentJEditorPaneHyperlinkUpdate(evt);
}
});
contentJEditorPane.setEditable(false);
contentJScrollPane.setViewportView(contentJEditorPane); getContentPane().add(contentJScrollPane, java.awt.BorderLayout.CENTER); backJButton.setText("Back");
backJButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
backJButtonActionPerformed(evt);
}
});
if (addressVector.size() <= 1)
backJButton.setEnabled(false);
addressJPanel.add(backJButton); homeJButton.setText("Home");
homeJButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
homeJButtonActionPerformed(evt);
}
});
addressJPanel.add(homeJButton); addressJPanel.add(new javax.swing.JLabel("Address:")); addressJTextField.setColumns(50);
// addressJTextField.setText("http://www.njue.edu.cn");
addressJTextField.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent evt) {
addressJTextField1FocusGained(evt);
}
});
addressJPanel.add(addressJTextField); goJButton.setText("go");
goJButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
goJButtonActionPerformed(evt);
}
});
addressJPanel.add(goJButton); getContentPane().add(addressJPanel, java.awt.BorderLayout.NORTH); statusJLabel.setText("Blank!");
getContentPane().add(statusJLabel, java.awt.BorderLayout.SOUTH); setPreferredSize(new java.awt.Dimension(800, 600));
setTitle("Browser By Robert");
setDefaultCloseOperation(3); pack();
}// </editor-fold> // GEN-END:initComponents private void backJButtonActionPerformed(java.awt.event.ActionEvent evt) {
addressVector.removeElement(addressVector.lastElement());
addressJTextField.setText(addressVector.lastElement().toString());
System.out.println(addressVector.lastElement());
goJButtonActionPerformed(evt);
addressVector.removeElement(addressVector.lastElement());
if (addressVector.size() <= 1)
backJButton.setEnabled(false);
else
backJButton.setEnabled(true);
} private void homeJButtonActionPerformed(java.awt.event.ActionEvent evt) {
String homeString = "http://www.njue.edu.cn";
addressJTextField.setText(homeString);
goJButtonActionPerformed(evt);
} private void addressJTextField1FocusGained(java.awt.event.FocusEvent evt) {
// TODO add your handling code here:
addressJTextField.selectAll();
} private void contentJEditorPaneHyperlinkUpdate(
javax.swing.event.HyperlinkEvent evt) {
// TODO add your handling code here:
final java.net.URL url = evt.getURL();
if (evt.getEventType() == javax.swing.event.HyperlinkEvent.EventType.ACTIVATED) {
contentJEditorPane = (javax.swing.JEditorPane) evt.getSource();
if (evt instanceof javax.swing.text.html.HTMLFrameHyperlinkEvent) {
javax.swing.text.html.HTMLFrameHyperlinkEvent e = (javax.swing.text.html.HTMLFrameHyperlinkEvent) evt;
javax.swing.text.html.HTMLDocument doc = (javax.swing.text.html.HTMLDocument) contentJEditorPane
.getDocument();
doc.processHTMLFrameHyperlinkEvent(e);
} else {
new Thread() {
public void run() {
try {
addressJTextField.setText(url.toString());
statusJLabel.setText("Done");
contentJEditorPane.setPage(url);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
addressVector.addElement(url);
if (addressVector.size() > 1)
backJButton.setEnabled(true);
}
}
if (evt.getEventType() == javax.swing.event.HyperlinkEvent.EventType.ENTERED) {
statusJLabel.setText(url.toString());
}
if (evt.getEventType() == javax.swing.event.HyperlinkEvent.EventType.EXITED) {
statusJLabel.setText(null);
}
} private void goJButtonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String tempURLString = addressJTextField.getText();
final String urlString = checkAddress(tempURLString);
if (urlString == null)
return;
addressJTextField.setText(urlString);
new Thread() {
public void run() {
try {
contentJEditorPane.setPage(new java.net.URL(urlString));
statusJLabel.setText("Done");
addressVector.addElement(new java.net.URL(urlString));
if (addressVector.size() > 1)
backJButton.setEnabled(true);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
} private String checkAddress(String urlString) {
urlString = urlString.trim();
if (urlString.isEmpty())
return null;
if (urlString.toLowerCase().startsWith("http://")) {
return urlString;
} else
return "http://" + urlString;
} /**
 * @param args
 *            the command line arguments
 */
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Browser().setVisible(true);
}
});
} // GEN-BEGIN:variables
// Variables declaration - do not modify
private javax.swing.JPanel addressJPanel;
private java.util.Vector<java.net.URL> addressVector;
private javax.swing.JTextField addressJTextField;
private javax.swing.JButton backJButton;
private javax.swing.JEditorPane contentJEditorPane;
private javax.swing.JScrollPane contentJScrollPane;
private javax.swing.JButton goJButton;
private javax.swing.JButton homeJButton;
private javax.swing.JLabel statusJLabel;
// End of variables declaration//GEN-END:variables}运行的时候经常会出现什么数组溢出的,不知道为什么会这样呢?