/*
* @name: MiniNavegador.java ©Copyleft
* @description: Este es un mini navegador en java
* @author: Ismael Perea
* @date: 16 de noviembre de 2009
* @version: 1.0
*/
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.util.*;
import java.io.IOException;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.html.*; // <-- Esta es el package clave del mininavegador
import java.io.File.*;
import javax.swing.JFileChooser.*;
/*
* Revisen las siguientes ligas:
* http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JEditorPane.html
* http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JEditorPane.html
* http://java.sun.com/docs/books/tutorial/uiswing/components/editorpane.html
*/
// Clase que muestra un mini navegador ultra mega sencillo
// Botones de regreso y avance de las páginas:
private JButton backButton, forwardButton
;
// Cajita de texto para la URL:
// Esta clase JEditorPane admite texto plano, HTML y RTF
// Permite mezclar fuentes, colores e imágenes
// Permite desplegar contenido HTML al indicarle el tipo de contenido (text/html):
// Este arreglo sirve para ir haciendo la lista de páginas visitadas:
// Método constructor del MiniNavegador:
public MiniNavegador() {
// Al extender de JFrame, le podemos poner un título de ventana al mini:
super("Mini Navegador Del equipo $lang");
// Tamaño (ancho y largo) del mini:
setSize(800, 700);
// Manejo de la salida (exit) del mini:
actionExit();
}
});
// Un pequeño menú (lo ideal es que le agreguen la opción de "Abrir archivo"):
actionExit();
}
});
fileMenu.add(fileExitMenuItem);
menuBar.add(fileMenu);
setJMenuBar(menuBar);
// Crear boton abrir
fc.showOpenDialog(fc);
int returnVal = fc.showOpenDialog(fc);
Archivo selectedFile = null;
{
selectedFile = fc.getSelectedFile();
}
//fileMenu.addActionListener();
}
});
fileMenu.add(fileOpenMenuItem);
menuBar.add(fileMenu);
setJMenuBar(menuBar);
// Colocamos en el panel los botones del mini, además de la cajita del URL:
backButton
= new JButton("< P'atrás"); actionBack();
}
});
backButton.setEnabled(false);
buttonPanel.add(backButton);
forwardButton
= new JButton("P'adelante >"); actionForward();
}
});
forwardButton.setEnabled(false);
buttonPanel.add(forwardButton);
locationTextField.
addKeyListener(new KeyAdapter() { if (e.
getKeyCode() == KeyEvent.
VK_ENTER) { actionGo();
}
}
});
buttonPanel.add(locationTextField);
actionGo();
}
});
buttonPanel.add(goButton);
// Preparamos a JEditorPane para recibir HTML y desplegarlo bonito (con merengue):
displayEditorPane.setContentType("text/html"); // <-- EL SECRETO DE TODO)
displayEditorPane.setEditable(false);
displayEditorPane.addHyperlinkListener(this);
// Página para precargar:
String paginaInicial
= "http://rigel.fca.unam.mx"; String miBlog
= "http://aprender.fca.unam.mx/~iperea";
// Creo mi index:
String miIndex
= "<html><head><title>Ismael Perea Mini Navegador</title></head><center>"; miIndex += "<body><b>Trabjo del Equipo $Lang</b><br />" + "<i>Este es un mini navegadorr</i><br />";
miIndex += "<font color=\"red\">El browser deberia funcionar</font><br />";
miIndex += "<img src=\"file:foto.png\"></img><br />";
miIndex += "</body></html>";
displayEditorPane.setText(miIndex);
/*
* ¿Qué pasa si comentas la línea de arriba y
* descomentas el siguiente bloque?
*/
/**************************************************************
try{
displayEditorPane.setPage(paginaInicial);
}catch (IOException e) {
System.err.println("No es posible cargar la página: " + e);
}
***************************************************************/
getContentPane
().
add(new JScrollPane(displayEditorPane
),
}
// Salir del mini:
private void actionExit() {
}
// Para regresar a la página anterior desde la actual:
private void actionBack() {
URL currentUrl
= displayEditorPane.
getPage(); int pageIndex = pageList.indexOf(currentUrl.toString());
try {
showPage(
new URL((String) pageList.
get(pageIndex
- 1)),
false); }
// Para ir a la página siguiente desde la actual:
private void actionForward() {
URL currentUrl
= displayEditorPane.
getPage(); int pageIndex = pageList.indexOf(currentUrl.toString());
try {
showPage(
new URL((String) pageList.
get(pageIndex
+ 1)),
false); }
// Para cargar y mostrar la página ingresada en el campito de la URL:
private void actionGo() {
URL verifiedUrl
= verifyUrl
(locationTextField.
getText()); if (verifiedUrl != null) {
showPage(verifiedUrl, true);
} else {
showError("¡No es una URL válida!");
}
}
// Mostrar un mensaje de error:
private void showError
(String errorMessage
) { }
// Verifica el formato de la URL:
// Para que sólo permita URLs que utilicen el protocolo HTTP:
if (!url.toLowerCase().startsWith("http://"))
return null;
// Verifica formato:
try {
verifiedUrl
= new URL(url
); return null;
}
return verifiedUrl;
}
// Despliega la página y la agrega a la lista de visitadas:
private void showPage
(URL pageUrl,
boolean addToList
) { // Muestra el bonito cursor de "espérame" mientras se carga la página:
try {
// Obtener la URL de la página actual desplegada:
URL currentUrl
= displayEditorPane.
getPage();
// Carga la página en el JEditorPane:
displayEditorPane.setPage(pageUrl);
// Obtener la URL de la nueva página desplegada:
URL newUrl
= displayEditorPane.
getPage();
// Agregar la página a la lista:
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());
}
// Actualizar el textito de la URL de la página cargada en ese momento:
locationTextField.setText(newUrl.toString());
// Actualiza los botones según la página cargada en ese momento:
updateButtons();
// Mensaje de error:
showError("¡¡¡La página no se puede cargar!!!");
} finally {
// Regresar el cursor a su imagen original:
setCursor
(Cursor.
getDefaultCursor()); }
}
// Actualiza los botones del P'adelante o P'atrás:
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));
}
}
// Manejo del click en las ligas de las páginas:
document.processHTMLFrameHyperlinkEvent(linkEvent);
} else {
showPage(event.getURL(), true);
}
}
}
// Correr el mini:
public static void main
(String[] args
) { MiniNavegador navegador = new MiniNavegador();
navegador.show();
}
} // Fin de la clase