Java Webbrowser

  • Onderwerp starter Onderwerp starter rvdp
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

rvdp

Gebruiker
Lid geworden
27 jul 2007
Berichten
9
Ik heb ergens de code gevonden voor een simpele Java Webbrowser, die gebruik maakt van Swing. Nu is het mijn bedoeling om naast het menu "File" ook een menu "History" toe te voegen, waarin de laatste 5 bezochte webpagina's komen te staan. Kan iemand mij hierbij helpen, heb nl weinig tot geen ervaring met Swing...
Alvast bedankt.


Dit is de code:

Code:
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 Mini 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();
}
}
 
Moeten deze laatste 5 bezochte pagina's opgeslagen worden ook als de browser afgesloten wordt? of alleen de laatste 5 pagina's die bezocht zijn tijdens dat de browser opgestart is.

Je kan iig gebruik maken van een URL[] om te pagina URL's in op te slaan.
 
Laatst bewerkt:
Het is voldoende dat ze enkel tijdens de huidige sessie opgeslagen worden.
 
Dan zal je genoeg hebben aan hetgene wat ik hierboven aangeeft.
Zodra een pagina opgevraagt wordt en er staat in een van de 5 nog about:blang, dan zet je het in plaats van de laagste about:blank in de array,staan er al 'normale' pagina's in, dan gooi je URLArray[0] weg en schuif je alles 1 omlaag. waarna je op URLArray[4] de nieuwste pagina zet.

Combineer dit met een menu-item welke 5 mogelijkheden heeft welke standaard op "about:blank" staan en worden aangepast elke keer dat er een pagina opgevraagt wordt.(dus updaten met de URLArray[] )
 
Laatst bewerkt:
Ja dat klopt, zelfs HTML wordt niet correct weergegeven, maar dat is ook niet de bedoeling... het gaat om een opdracht die ik gekregen heb waarbij de nadruk op het gebruik van Swing ligt...
 
Ik heb een geschiedenisfunctie toegevoegd, de compiler blijft echter 1 foutmelding geven die ik nie weg krijg:

"Cannot access Historypanel"

Historypanel is de aparte java-klasse voor het geschiedenisvenster, deze is zeker 100% correct, reeds uitgebreid getest.

De fout zit in onderstaande code, meerbepaald op lijn 166, waar opdracht wordt gegeven om het Historypanel te openen: Historypanel tonen= new Historypanel(adressen)

Code:
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.*;


public class Browser extends JFrame
implements HyperlinkListener
{

private JButton backButton, forwardButton, historyButton;


private JTextField locationTextField;


private JEditorPane displayEditorPane;


private ArrayList pageList = new ArrayList();


public ArrayList geschiedenis = new ArrayList();

// Constructor for Mini Web Browser.
public Browser()
{
// Set application title.
super("Java Browser - Ruben Vandepitte - 2ELICT1");

// 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("Bestand");
fileMenu.setMnemonic(KeyEvent.VK_F);
JMenuItem fileExitMenuItem = new JMenuItem("Afsluiten",
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);

historyButton = new JButton("Geschiedenis");
historyButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
actionHistory();
}
});
historyButton.setEnabled(false);
buttonPanel.add(historyButton);

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() {
geschiedenis.add(locationTextField.getText());
URL verifiedUrl = verifyUrl(locationTextField.getText());
if (verifiedUrl != null) {
showPage(verifiedUrl, true);
} else {
showError("Ongeldige URL");
}
}

// Toon geschiedenis
public void actionHistory() {
		String [] adressen = new String[geschiedenis.size()];
		for (int i=0;i<geschiedenis.size();i++) {
			adressen[i] = (String)geschiedenis.get(i);
		} // arraylist naar string-rij omzetten
		Historypanel tonen = new Historypanel(adressen);
		}

// 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("Kan pagina niet laden.");
}
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) {
Browser browser = new Browser();
browser.show();
}
}

Mss kan iemand dit vlug even compileren en indien mogelijk zeggen waar de fout zit en wat de oplossing zou kunnen zijn... gewoon op zicht mag natuurlijk ook altijd...

Bedankt!
 
Laatst bewerkt:
Maar zit de class HistoryPanel wel in dezelfde package als de class Browser?
En maak je geen fout in de naam? want het is hoofdlettergevoelig.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan