martes, 22 de febrero de 2011

Tutorial: Ver un documento HTML en Java usando JEditorPane de Swing

Este programa mostrará un documento HTML (que esté en la web o uno local) en un JEditorPane. Veamos:
Creamos un nuevo Formulario JDialog en nuestro proyecto. Yo le puse de nombre Navegador a esa clase.
Luego, le cambiamos el gestor de distribución (el Layout) que viene por defecto en NetBeans (Free Design) y elegimos el Grid Layout. Para eso, damos derecho sobre el JDialog que acabamos de crear, y elegimos la opción Diseño de Rejilla o Grid Layout en Activar gestión de distribución:
Ahora entramos a la fuente de nuestro JDialog y modificamos su constructor agregándole un JPanelEditor y su JScrollPane.
El código del constructor de nuestra clase Navegador quedaría así:
public Navegador(java.awt.Frame parent, boolean modal, String ruta){
        super(parent, modal);
        panelEditor = new JEditorPane();
        panelEditor.setEditable(false);
        try {
            panelEditor.setPage(new URL(ruta));
        } catch (IOException ex) {
            Logger.getLogger(Navegador.class.getName()).log(Level.SEVERE, null, ex);
        }

        editorScrollPane = new JScrollPane(panelEditor);

        this.getContentPane().add(editorScrollPane);
        initComponents();
    }
Nota que, ya que modificamos el constructor de Navegador, entonces también deberíamos modificar la línea donde se instancia un objeto de esta clase en el método main(String args[]) de Navegador (este método te lo crea NetBeans al crear el JDialog). Como no vamos a utilizar este método, podemos borrarlo íntegramente.
Ahora colocamos nuestro archivo HTML en la carpeta de nuestro proyecto NetBeans (por ejemplo el mío está en C:\Users\André\Documents\NetBeansProjects\MostradorHtml). Lo podemos colocar ahí, o mejor aún, creamos una carpeta documentosHTML y dentro de ella colocamos nuestro miejemplo.html. Debería quedar algo así:

Seguidamente creamos un objeto paginaHTML de la clase File de Java y le damos la ruta de nuestro archivo:
File paginaHTML = new File("documentosHTML/miejemplo.html");
Y obtenemos la ruta absoluta de nuestro archivo HTML usando el método getAbsolutePath() de paginaHTML:
String urlDocumento = "file://localhost/"+paginaHTML.getAbsolutePath();
Notar que se puso file://localhost, esto para indicar que el archivo no está en la web, sino que es un archivo local.Si deseáramos cargar una página web, bastaría con:
String urlDocumento = "http://www.google.com";
Finalmente en nuestra clase Main creamos un objeto minavegador de la clase Navegador, especificando la ruta (urlDocumento) de nuestro archivo HTML en su constructor.
public static void main(String[] args) throws IOException {
        // TODO code application logic here
        File paginaHTML = new File("documentosHTML/miejemplo.html");
        String urlDocumento = "file://localhost/"+paginaHTML.getAbsolutePath();
        Navegador minavegador = new Navegador(null, true, urlDocumento);
        minavegador.setSize(800,600);
        minavegador.setTitle("Mi documento HTML");
        minavegador.setLocationRelativeTo(null);
        minavegador.setVisible(true);
    }
¡Y este es nuestro resultado!
Cabe señalar que este JEditorPane tiene soporte para cuestiones muy básicas de HTML. Pero puede servir para mostrar algún tipo de reporte con tablas sencillo u otras cuestiones que necesitemos.
Puedes descargar el proyecto desde este enlace en Google Docs.
Se aceptan sugerencias y/o correcciones, todos estamos aprendiendo :)

lunes, 21 de febrero de 2011

¡Bienvenidos a Javalancha!

Este es el primer post, ya quiero empezar a compartir lo que estoy aprendiendo. Estoy poniendo imágenes de muestra, enlaces y un poco de código.

@Override
  protected JRootPane createRootPane() {
    JRootPane rootPane1 = new JRootPane();
    KeyStroke stroke = KeyStroke.getKeyStroke("ESCAPE");
    AbstractAction actionListener = new AbstractAction() {
      public void actionPerformed(ActionEvent actionEvent) {
        setVisible(false);
      }
    } ;
    InputMap inputMap = rootPane1.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    inputMap.put(stroke, "ESCAPE");
    rootPane1.getActionMap().put("ESCAPE", actionListener);

    return rootPane1;
  }

¡Nos vemos pronto!