octubre 28, 2006


JAVA - HTML dentro de componentes Swing



Un pequeño tips que acelera un poco el codificar que es usar html dentro de java (NO JSP.. y esas cosas), si no poner código html dentro de un componente de Swing JLabel, JButton, Panel..etc..
Esto no se desde que versión se puede utilizar pero yo la he usado desde la versión JDK1.4.

Veamos unos ejemplos, si desearan tener un botón(Jbutton ) o un Jlabel con salto de linea es super sencillo o formulas mátematicas podrían hacer algo así:

"Para muestra un Botón" con html :

new JButton("<html>"
+ " &#8730;49<hr>2<sup>&#188;</sup>"
+ " </html>");

se ve así:

Jbutton con HTML


Esto puede ser util cuando quieran mostrar un texto muy largo en Html con salto de lineas, ya que por ejemplo los JButton no funcionan los saltos de linea "\n", y conhtml se ajusta solo el texto


import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class TextosLargos extends JFrame{

TextosLargos(){
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(400,200);
getContentPane().setLayout(new GridLayout(1,2));
getContentPane().add(new JButton(
"Este texto \n es demasiado \n largo para"
+ "\n salir"));
getContentPane().add(new JButton(
getContentPane().add(new JButton(
"<html> This string is longer than the "
+ "display. </html>"));
}

public static void main(String[] args) {
new TextosLargos().setVisible(true);
}
}



Ventana con 2 JButton con textos largos el de la derecha tiene HTML.
y se ajusta solo al tamaño del componente.



En esta se nota un poco como se ajusta el texto al tamaño del componente, comparada con la imagen anterior.


Y ahora una de las cosas más poderosas quizas, usar hojas de estilo (CSS).
Si las hojas de estilo (css) pueden cambiar plenamente el diseño de una página web. se podran usar Hojas de estilo en los componentes Swing?
Si se puede!!!!

Esto se podría hacer en HTML.

<style>
p {
color: red;
}
sup {
color:yellow;
}
</style>


Y un ejemplo de CSS en Java, donde se crea una variable con el style y después es usado en un par de botones. Por lo tanto si alguien quiere modificar como se muestran los botones modifica el CSS.


import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class BotonesHojasEstilo extends JFrame {

private static final String HTML_HEAD_STYLE =
"<head> <style>"
+ "p { color:red; }"
+ "sup { color:yellow; }"
+ "</style> </head>";

BotonesHojasEstilo() {
setSize(300, 200);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(new GridLayout(1, 3));
getContentPane().add(new JButton("<html>" +
HTML_HEAD_STYLE+ // especifica la hoja de estilo
"<h1>1<sup>st</sup></h1>" +
"<hr> <p> Use Blue</p></html>"));

getContentPane().add(new JButton( "<html>" +
HTML_HEAD_STYLE+
"<h1>2<sup>nd</sup></h1>" +
"<hr> <p>Use <b>Red</b></p></html>"));

getContentPane().add(new JButton(
"<html><h1>3<sup>rd</sup></h1><hr>" +
"<p color=green> Use <u>Green</u></p></html>"));
}

public static void main(String[] args) {
new BotonesHojasEstilo().setVisible(true);
}
}



JButtons con CSS.


Y han visto algo como esto :

<link href="./jbutton.css" rel="stylesheet" type="text/css">

Exportar una Hoja de estilo desde un archivo, esto tipico bueno en JAVA también pueden. O sea
podrían cambiar el codigo modificando archivos de textos.... Acá pueden ver como... (el último ejemplo lo saque desde esa página).

Cualquier duda o algun error que cometi en los códigos me avisan en los comentarios nomas, nos vemos.

8 comentarios:

  1. Como siempre dando comentarios muuuuy interesantes!! Gracias :D

    Lo de HTML lo conocía, pero no tenía idea que se pudieran ocupar hasta las cosas de CSS :O.

    Otro tip que será probado y utilizado jejejeje.

    Abrazotes!

    ResponderEliminar
  2. si las Hojas de estilo (CSS) estan buenisimas...
    y con incluir CCS desde archivos es increible....

    Además con lo de Java 6 que soporta script

    Scripting Language Support (JSR 223)
    * New framework and API for scripting languages
    * Mozilla Rhino engine for JavaScript built into the platform


    Mozilla Rhino suena conocido o no.... :P

    http://java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/

    ResponderEliminar
  3. Hey... muy buen post compadre..
    interesante sobre todo el poder manejar las CSS desde fuera, eso ayuda bastante en la mantención de las interfaces.. :)

    ¿hay plugin para eclipse para agregar controles, al estilo .NET?

    bueno saludos desde Antofa..

    Bye

    pd:Pronto dejare .NET jajaja

    ResponderEliminar
  4. Rhino! ya se me había hasta olvidado eso :P
    Todavía no he probado lo de los scripts en la versión 6... creo que lo haré en un tiempo más :D

    Manuel, tal vez te sirva el plugin jigloo. Eso sí que es gratis cuando el programa que escribes no es con fines comerciales, de lo contrario tendrías que pagar una licencia ;)

    ResponderEliminar
  5. Noooo.. jigloo es como mmm hay no más bajense el eclipse 3.2.1 y después los features que trae el Calisto ( donde viene el Visual Editor (VE), que es mucho mejor y más simple que jigloo, y sin las restricciones que el jigloo trae.)

    una demo de como instalarlo:
    http://www.eclipse.org/evangelism/demos/install-callisto/install-callisto.html
    la pagina del instalador
    http://www.eclipse.org/callisto/discovery.php
    y la oficial...
    http://www.eclipse.org/callisto/java.php

    ResponderEliminar
  6. gracias por el dato al parecer Callisto se ve muy bueno ...

    pd: ya vi el demo.. ta buenisimo

    we see...

    ResponderEliminar
  7. Buenas noches, deseo pedir un favor enorme, me podrían decir cómo puedo hallar una página sencilla de usar que me dé cualquier significado de alguna instrucción de sun one, como el encarta, para programadores novatos, gracias, saludos de Ecuador... rsso82@hotmail.com

    ResponderEliminar
  8. Me fue muy útil la información. No podía escribir un texto en 2 líneas con un JButton y con tu explicación pude.¡Gracias! Llevaba horas intentándolo y otras sugerencias que encontré no me funcionaron.

    ResponderEliminar