image Estos últimos días sin post’s me puse emocional y como quien no quiere la cosa me empecé a quejar de todo y casi todos XD …pero bueno… ayer en un día perfecto de clima y de ánimos me puse a retomar algo de la programación, y charlando con Clayder nos dimos cuenta que tenemos mucho material como para postearlo aquí, así que pues ahora empezaremos con algo tan simple y que se ve tan complejo como lo es crear un navegador web con java, cabe recordar que Java está bien posicionado entre la gente porque tiene una inmensidad de usos entre los que destaca el uso web, y algunos de sus controles en Swing se adaptan perfectamente a los requerimientos que se establezcan en el programa… es así, que en este caso usaremos la librería JavaNet y el control TextPane para hacer un simple y sencillo navegador java… Pero ya fuera de floro vamos con los procedimientos

Creamos un Proyecto en NetBeans, como para ahorrarnos trabajo creando interfaces y todo eso (no quiero decir que siempre lo hagas, pero es como usar un papel, o la calculadora.) y lo llamaremos IFX1… o como quieras.

imageLuego Le agregaremos un JFrame al Proyecto, que es básicamente una clase Java, sólo que con especificaciones en Netbeans para que puedas diseñarla visualmente.

image

image

Una vez creado el JFrame, diseñamos todo el frame hasta que se vea más o menos así:

Dibujo

Donde identificamos básicamente, 3 controles que debemos usar:

  • Un Campo de Texto JTextField (llamado “txtURL” para efectos de este post)
  • Un Botón JButton (Llamado “btnNavegar” para efectos de este post)
  • Un Panel Editor de Texto JEditorPane (Llamado “txtContenido” para efectos de este post)

Luego si quieren pueden agregarle botones “actualizar”, algún indicador de tiempo y cosas por el estilo, pero básicamente, esos 3 harán funcionar un navegador web.

Ahora vamos a la parte de Código, Vamos a donde dice “Fuente” o “Code” en la versión inglesa, y buscamos nuestro constructor, que básicamente debe lucir así:

public Navegador() {

initComponents();
}

Y le agregamos, esta línea debajo del método de inicio de los componentes:

setExtendedState(MAXIMIZED_BOTH);

Eso, para que la aplicación se inicie en modo maximizado, y pues es opcional, pero lo recomiendo ya que las páginas webs no son cosa de una ventanita XD…

Ahora bien… como Netbeans crea los Frame como un archivo ejecutable, a criterio personal también, pueden eliminar el método main de esa clase, para que puedan jalarlo, desde el Main.Java de su proyecto, entonces pues, buscamos esta sección de código:

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Navegador().setVisible(true);
}
});
}

Y la eliminamos…

Ahora, haremos un último regreso al diseño (clic en “Diseño” en la parte de arriba) y hacemos varias veces clic en el Botón “btnNavegar”, de nuestra aplicación, para que, automáticamente se cree un evento asociado a presionar dicho botón.

Se crearán nuevas líneas de código así:

private void btnNavegarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

Y pues, ahí es donde volcaremos todo nuestro funcionamiento del navegador, ya que obviamente se navega al presionar dicho botón.

Antes de colocar código, sepan que usaremos un tipo de variable del paquete NET de Java, así que arriba de nuestra clase, después de donde especifica el paquete (algo así como package (…)), colocamos:

import java.net.*;

Que hará que podamos usar algunos tipos extra de programación.

Bien, ya sin pasearlos mucho de regreso a nuestro código, lo que haremos primero será definir como capturamos una URL, lo cual debemos hacer jalando el contenido del txtURL, por lo que colocaremos este código:

URL url = new URL(txtURL.getText()); 

Vemos que NetBeans nos soltará una advertencia de que está mal, y es porque el paquete NET tiene una especificación de Excepción por si una URL está mal formada, entonces si eso ocurre, la lanzará y nuestra aplicación se bloqueará… para eso lo enclavamos en un Try-Catch:

try{
URL url = new URL(txtURL.getText());

}  catch(Exception e){

}

Y Finalmente, lo único que nos queda por hacer es setear nuestro URL en el txtContenido, asi:

txtContenido.setPage(url);

Entonces… nuestro código de funcionamiento quedará algo asi:

private void btnNavegarActionPerformed(java.awt.event.ActionEvent evt) {
try {
URL url = new URL(txtURL.getText());
txtContenido.setPage(url);
} catch (Exception e) {
System.out.println(e);
}

}

Luego simplemente te queda crear el objeto en el archivo main:

image

Y Listo.

La desventaja de hacer esto, es que sólo se pueden colocar URL’s con protocolo, es decir no puedes colocar “www.google.com” pero si “http://google.com” y además este programita no leerá los archivos css y js asociados a la página web, por lo que a veces puede mostrarse inapropiadamente, aunque sería ideal para saber que página usa más recursos y que página no…

Existe otra forma de hacerla más eficiente, que explicaré en un segundo post, con la que en vez de setear una simple variable, lo que se hace es volcar el contenido de la URL desde un Stream (se usará el paquete io) y mostrarlo en el txtContenido, de la cual aún estoy investigando e implementando para el siguiente post… jeje… pero con la que ya se muestra mejor las páginas y se puede interactuar con ellas…

—————

Ah verdad, antes que termine de redactar este post, algunas personas me estuvieron preguntando vía mail con respecto a los anteriores post donde trataba con Netbeans, que ellos no podían compilar con F9, y que sólo se compilaba cada vez que ejecutaban el programa, pues bien, son pasos sencillos…

Primero vas a tu proyecto, sea cual fuere, y le das clic a propiedades:

imageTe saldrá una ventanita como esta:

image

Vas a esa parte donde está ubicada la imagen y desmarcas el check que dice: “Compilar al Grabar”, así tu proyecto se pondrá en el modo tradicional en donde uno le hace F9 para compilar, cosa que, por cierto, no se por qué NetBeans decidió quitar y poner por default este otro tipo de compilación…

Pero en fin… espero este post, simple y sencillo les sirva… luego haré uno más complejo acerca de los Streams y como poder mejorar este navegador…

Saludos!

PD: Algunos se preguntarán porque la variable “url” tiene que ser necesariamente del tipo URL, pues si quieren sólo póngalo como String, yo lo puse así porque luego la usaré con fines que sólo se pueden hacer en tipos de variables URL, y si siguen la línea de este post se darán cuenta.

ACTUALIZACIÓN: No había considerado postear el proyecto que hice debido a que las líneas relevantes a hacer son sólo dos… pero ante la insistencia del comentarista de abajo lo pondré… y supongo que para que se ahorren diseñar :D

PROYECTO NAVEGADOR WEB BÁSICO EN NETBEANS