diff options
| author | Kumar Priyansh <[email protected]> | 2017-11-14 15:29:16 +0530 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-11-14 15:29:16 +0530 |
| commit | be68f40027fa9e9c5b46fef75192b44d941c718c (patch) | |
| tree | 5b5f155e18f45bc4d475ac8499b96bfd6fc3a782 | |
| parent | 314f566923a43ca7e3cff3a3329ae9e828269ce4 (diff) | |
| download | MiniBrowser-be68f40027fa9e9c5b46fef75192b44d941c718c.tar.xz MiniBrowser-be68f40027fa9e9c5b46fef75192b44d941c718c.zip | |
| -rw-r--r-- | MiniBrowser.class | bin | 0 -> 7240 bytes | |||
| -rw-r--r-- | MiniBrowser.java | 242 |
2 files changed, 242 insertions, 0 deletions
diff --git a/MiniBrowser.class b/MiniBrowser.class Binary files differnew file mode 100644 index 0000000..b34a090 --- /dev/null +++ b/MiniBrowser.class diff --git a/MiniBrowser.java b/MiniBrowser.java new file mode 100644 index 0000000..56137f5 --- /dev/null +++ b/MiniBrowser.java @@ -0,0 +1,242 @@ +import java.awt.*; +import java.awt.event.*; +import java.net.*; +import java.util.*; +import javax.swing.*; +import javax.swing.event.*; +import javax.swing.text.html.*; + +// The Simple Web Browser. +public class MiniBrowser extends JFrame + + implements HyperlinkListener { + // These are the buttons for iterating through the page list. + private JButton backButton, forwardButton; + + // Page location text field. + private JTextField locationTextField; + + // Editor pane for displaying pages. + private JEditorPane displayEditorPane; + + // Browser's list of pages that have been visited. + private ArrayList pageList = new ArrayList(); + + // Constructor for Mini Web Browser. + public MiniBrowser() { + // Set application title. + super("Mini Browser"); + + // Set window size. + setSize(640, 480); + + // Handle closing events. + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + actionExit(); + } + }); + + // Set up file menu. + JMenuBar menuBar = new JMenuBar(); + JMenu fileMenu = new JMenu("File"); + fileMenu.setMnemonic(KeyEvent.VK_F); + JMenuItem fileExitMenuItem = new JMenuItem("Exit", + KeyEvent.VK_X); + fileExitMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + actionExit(); + } + }); + fileMenu.add(fileExitMenuItem); + menuBar.add(fileMenu); + setJMenuBar(menuBar); + + // Set up button panel. + JPanel buttonPanel = new JPanel(); + backButton = new JButton("< Back"); + backButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + actionBack(); + } + }); + backButton.setEnabled(false); + buttonPanel.add(backButton); + forwardButton = new JButton("Forward >"); + forwardButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + actionForward(); + } + }); + forwardButton.setEnabled(false); + buttonPanel.add(forwardButton); + locationTextField = new JTextField(35); + locationTextField.addKeyListener(new KeyAdapter() { + public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_ENTER) { + actionGo(); + } + } + }); + buttonPanel.add(locationTextField); + JButton goButton = new JButton("GO"); + goButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + actionGo(); + } + }); + buttonPanel.add(goButton); + + // Set up page display. + displayEditorPane = new JEditorPane(); + displayEditorPane.setContentType("text/html"); + displayEditorPane.setEditable(false); + displayEditorPane.addHyperlinkListener(this); + + getContentPane().setLayout(new BorderLayout()); + getContentPane().add(buttonPanel, BorderLayout.NORTH); + getContentPane().add(new JScrollPane(displayEditorPane), + BorderLayout.CENTER); + } + + // Exit this program. + private void actionExit() { + System.exit(0); + } + + // Go back to the page viewed before the current page. + private void actionBack() { + URL currentUrl = displayEditorPane.getPage(); + + int pageIndex = pageList.indexOf(currentUrl.toString()); + try { + showPage( + new URL((String) pageList.get(pageIndex - 1)), false); + } catch (Exception e) {} + } + + // Go forward to the page viewed after the current page. + private void actionForward() { + URL currentUrl = displayEditorPane.getPage(); + int pageIndex = pageList.indexOf(currentUrl.toString()); + try { + showPage( + new URL((String) pageList.get(pageIndex + 1)), false); + } catch (Exception e) {} + } + + // Load and show the page specified in the location text field. + private void actionGo() { + URL verifiedUrl = verifyUrl(locationTextField.getText()); + if (verifiedUrl != null) { + showPage(verifiedUrl, true); + } else { + showError("Invalid URL"); + } + } + + // Show dialog box with error message. + private void showError(String errorMessage) { + JOptionPane.showMessageDialog(this, errorMessage, + "Error", JOptionPane.ERROR_MESSAGE); + } + + // Verify URL format. + private URL verifyUrl(String url) { + // Only allow HTTP URLs. + if (!url.toLowerCase().startsWith("http://")) + return null; + + // Verify format of URL. + URL verifiedUrl = null; + try { + verifiedUrl = new URL(url); + } catch (Exception e) { + return null; + } + + return verifiedUrl; + } + + /* Show the specified page and add it to + the page list if specified. */ + private void showPage(URL pageUrl, boolean addToList) { + // Show hour glass cursor while crawling is under way. + setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + + try { + // Get URL of page currently being displayed. + URL currentUrl = displayEditorPane.getPage(); + + // Load and display specified page. + displayEditorPane.setPage(pageUrl); + + // Get URL of new page being displayed. + URL newUrl = displayEditorPane.getPage(); + + // Add page to list if specified. + if (addToList) { + int listSize = pageList.size(); + if (listSize > 0) { + int pageIndex = + pageList.indexOf(currentUrl.toString()); + if (pageIndex < listSize - 1) { + for (int i = listSize - 1; i > pageIndex; i--) { + pageList.remove(i); + } + } + } + pageList.add(newUrl.toString()); + } + + // Update location text field with URL of current page. + locationTextField.setText(newUrl.toString()); + + // Update buttons based on the page being displayed. + updateButtons(); + } catch (Exception e) { + // Show error messsage. + showError("Unable to load page"); + } finally { + // Return to default cursor. + setCursor(Cursor.getDefaultCursor()); + } + } + + /* Update back and forward buttons based on + the page being displayed. */ + private void updateButtons() { + if (pageList.size() < 2) { + backButton.setEnabled(false); + forwardButton.setEnabled(false); + } else { + URL currentUrl = displayEditorPane.getPage(); + int pageIndex = pageList.indexOf(currentUrl.toString()); + backButton.setEnabled(pageIndex > 0); + forwardButton.setEnabled( + pageIndex < (pageList.size() - 1)); + } + } + + // Handle hyperlink's being clicked. + public void hyperlinkUpdate(HyperlinkEvent event) { + HyperlinkEvent.EventType eventType = event.getEventType(); + if (eventType == HyperlinkEvent.EventType.ACTIVATED) { + if (event instanceof HTMLFrameHyperlinkEvent) { + HTMLFrameHyperlinkEvent linkEvent = + (HTMLFrameHyperlinkEvent) event; + HTMLDocument document = + (HTMLDocument) displayEditorPane.getDocument(); + document.processHTMLFrameHyperlinkEvent(linkEvent); + } else { + showPage(event.getURL(), true); + } + } + } + + // Run the Mini Browser. + public static void main(String[] args) { + MiniBrowser browser = new MiniBrowser(); + browser.show(); + } +}
\ No newline at end of file |
