import java.io.*; import java.net.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.event.*; import java.util.*; public class Browser extends JApplet{ public static String START_PAGE = "http://www.dn.se"; public JTextField textField = null; public JEditorPane editorPane = null; public JButton prev = null; public JButton next = null; public String[] nav; public int pointer; public int size; public void init(){ try{ nav = new String[100]; pointer = 0; size = 1; editorPane = new JEditorPane(START_PAGE); editorPane.addHyperlinkListener(new LinkListener()); nav[pointer] = editorPane.getPage().toString(); textField = new JTextField(START_PAGE, 60); textField.addKeyListener(new ReturnListener()); prev = new JButton("<"); prev.setEnabled(false); prev.addActionListener(new PrevListener()); next = new JButton(">"); next.setEnabled(false); next.addActionListener(new NextListener()); editorPane.setEditable(false); //FlowLayout Default JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEADING)); panel.add(prev); panel.add(next); panel.add(textField); getContentPane().add(panel, BorderLayout.NORTH); getContentPane().add(new JScrollPane(editorPane), BorderLayout.CENTER); }catch(Exception e){ editorPane.setText(e.toString()); } } class PrevListener implements ActionListener{ public void actionPerformed(ActionEvent e){ if (pointer > 0){ pointer--; try{ editorPane.setPage(nav[pointer]); textField.setText(nav[pointer]); }catch(IOException ioe){ editorPane.setText(ioe.toString()); } } if (pointer == 0) prev.setEnabled(false); if (pointer + 2 == size) next.setEnabled(true); } } class NextListener implements ActionListener{ public void actionPerformed(ActionEvent e){ if (pointer + 2 == size) next.setEnabled(false); if (pointer == 0) prev.setEnabled(true); pointer++; try{ editorPane.setPage(nav[pointer]); textField.setText(nav[pointer]); }catch(IOException ioe){ editorPane.setText(ioe.toString()); } } } class ReturnListener implements KeyListener{ public void keyPressed(KeyEvent e){ if (e.getKeyCode() == e.VK_ENTER){ try{ editorPane.setPage(textField.getText()); }catch(IOException ioe){ editorPane.setText(ioe.toString()); } pointer++; size++; nav[pointer] = textField.getText(); if (pointer == 1) prev.setEnabled(true); if (pointer + 1 < size){ size = pointer + 1; next.setEnabled(false); } } } public void keyReleased(KeyEvent e){ } public void keyTyped(KeyEvent e){ } } class LinkListener implements HyperlinkListener{ public void hyperlinkUpdate(HyperlinkEvent he){ if (he.getEventType() == HyperlinkEvent.EventType.ACTIVATED){ if ((he.getURL()).getRef() == null){ try{ editorPane.setPage(he.getURL()); textField.setText(he.getURL().toString()); }catch(IOException ioe){ editorPane.setText(ioe.toString()); } pointer++; size++; nav[pointer] = he.getURL().toString(); if (pointer == 1) prev.setEnabled(true); if (pointer + 1 < size){ size = pointer + 1; next.setEnabled(false); } } else editorPane.scrollToReference((he.getURL()).getRef()); } } } }