domingo, 15 de septiembre de 2013

Componentes De Texto Java Swing

En el articulo anterior trabajamos los componentes Atómicos en esta oportunidad le daremos paso a los componentes de Texto....
Nuevamente vamos a dejar el tema de contenedores para una próxima entrada, ya que primero evacuaremos los componentes que los contendedores alojarán...

Seguimos con la mecánica anterior, vamos a ver en términos generales cada componente y al final se dejará un enlace de descarga donde veremos los componentes en acción....

Que Son?

Los componentes de Texto son los que nos permiten procesar datos de tipo cadena, sea como entrada o salida de información, todos los sistemas necesitan procesar datos, tener un mecanismo de entrada y salida disponible para el usuario, este tipo de componentes son obligados en casi todos los desarrollos...

Cuales Son?

Existen diferentes componentes y formas de procesar texto, podemos hacerlo por consola o por medio de ventanas de Dialogo... veamos los que nos provee java swing...

JTextField.
Es uno de los componentes mas comunes, permite introducir un campo de texto simple en nuestra ventana, ideal para ingresar o mostrar datos puntuales en un formulario (Api de Java).
cajaDeTexto = new JTextField();
cajaDeTexto.setText("CoDejaVu");
cajaDeTexto.setBounds(90, 60, 90, 23); 

JFormattedTextField.
Permite introducir un campo de texto con formato, (si definimos que solo recibe números no permitirá letras, para esto se requiere definir la mascara a utilizar...) es muy útil al momento de hacer validaciones en nuestros formularios, tambien muy comun al trabajar con fechas (Api de Java).
/**Creamos la mascara con la que trabajaremos*/
mascara= new MaskFormatter("########");
/**Le enviamos la mascara a el componente*/
cajaDeTextoConFormato= new JFormattedTextField(mascara);
/**Importante definir el foco del componente, para que almacene el valor*/
cajaDeTextoConFormato.setFocusLostBehaviorcajaDeTextoConFormato.COMMIT);
cajaDeTextoConFormato.setBounds(330, 60, 80, 23);

JPasswordField
Al verlo es un campo simple, sin embargo es un campo de texto especial que oculta los caracteres ingresados, su uso se centra en ventanas de login o ingreso de contraseñas (Api de Java).
campoContraseña = new JPasswordField();
campoContraseña.setBounds(530, 60, 80, 23); 

JTextArea
Permite vincular un área de texto donde el usuario ingresará información o simplemente para presentar cadenas de texto, obviamente permite procesar mucha mas cantidad de información que los componentes anteriores (Api de Java).
areaDeTexto = new JTextArea();
areaDeTexto.setText(CadenaConElTexto);
areaDeTexto.setBounds(90, 90, 520, 103); 

JEditorPane
Es un componente similar al anterior, sin embargo permite vincular un área de texto con propiedades de formato, es decir, por ejemplo, podemos darle formato HTML a nuestro texto usando etiquetas, modificando el tamaño, color y hasta vinculando imagenes... (Api de Java).
areaEditorPane = new JEditorPane();
areaEditorPane.setBounds(90, 200, 520, 103);
/**Definimos el tipo de texto que utiliza*/
areaEditorPane.setContentType("text/html"); 
areaEditorPane.setText(CadenaConTextoHTML);

JTextPane 
Es practicamente igual al anterior, básicamente posee las misma funciones, por lo cual podemos decir que es una mejora del JEditorPane permitiendo otras opciones de formato, colores, iconos, trabajo con estilos, componentes entre otros  (Api de Java).
/**usamos StyleContext para definir el estilo a usar*/
StyleContext estilo = new StyleContext();
/**creamos el estilo, no definimos nombre ni estilo padre...*/
Style estiloRojo = estilo.addStyle(null, null);
StyleConstants.setForeground( estiloRojo, Color.red );
/**definimos el estilo a usar*/
DefaultStyledDocument estiloPorDefecto=new DefaultStyledDocument(estilo);
areaTextPane = new JTextPane(estiloPorDefecto);
areaTextPane.setCharacterAttributes(estiloRojo, false);
areaTextPane.setBounds(90, 310, 520, 103);


El Ejemplo.

Nuevamente les comparto el código fuente de una pequeña aplicación de ejemplo muy útil para ver los componentes anteriores en funcionamiento....... también vinculamos un botón para el evento en el que procesamos la información ingresada....... 



Cabe resaltar que esta entrada brinda una idea general sobre estos componentes mas no es un ejemplo profundo de cada uno de ellos, mas adelante se trabajarán por separado para un mayor entendimiento....

Descarga.

Como es costumbre en el enlace de descarga se encuentra el archivo .rar con la aplicación, solo es cuestion de descomprimir y abrir con Eclipse pero si usas NetBeans te interesará esta entrada con un vídeo paso a paso de como abrirlo en el........ recuerden que es gratis, y nada cuesta opinar, compartir o agradecer :)



Conclusiones.

Vimos de forma rápida cuales son los componentes de texto que nos provee Java Swing, con esto nos hacemos a una idea de cuales podemos utilizar y para que momentos...

Hay componentes muy parecidos o con muy pocas diferencias, su uso depende de lo que necesitemos hacer y el conocimiento que tengamos de cada uno de ellos.

Mas adelante vendrán nuevas entradas con ejemplos puntuales....



También te podría Interesar.


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir
 y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

17 comentarios:

  1. Muy bueno el artículo, espero el que viene para profundizar más en el JTextPane

    ResponderEliminar
    Respuestas
    1. Hola Julio que pena la demora, gracias por el comentario y espero mas adelante continuar con ese tema ;) Saludos

      Eliminar
  2. Cristian, fíjate que estoy haciendo una clases para formatear una tabla y he declarado unas variables para poder darle formato a los textos de la tabla:

    Font normal = new Font("Arial", Font.PLAIN, 12);
    Font negrita = new Font("Arial", Font.BOLD, 14);
    Font cursiva = new Font( "Arial",Font.ITALIC,13 );

    El problema que tengo es que no puedo crear un nuevo FONT subrayado, este bloque no me funciona:

    Font subrayado = new Font("Arial", TextAttribute.UNDERLINE_ON, Font.BOLD);

    Habrá posibilidades de subrayar texto y darle Negrilla?
    Thanks in advance
    Saludos.

    ResponderEliminar
    Respuestas
    1. Si para dejar en negrita y subrayado, tenes que hacer (este ejemplo es uno que hice yo sobre un JTextArea):

      //Obtenemos la fuente que tiene el textarea
      Font fuente = textarea.getFont();
      //Creamos una nueva fuente con la fuente y tamaño original, pero en negrita
      Font fuenteNueva = new Font(fuente.getName(), Font.BOLD, fuente.getSize());
      //Creamos un objeto atributos para que se pueda subrayar
      Map atributos = new java.util.HashMap<>();
      //Seteo el atributo que me dice que debemos subrayar
      atributos.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
      //Seteamos al textarea la fuente en negrita y subrayada
      areatexto.setFont(fuenteNueva.deriveFont(atributos));

      Espero te sirva . Saludos. HUGO.

      Eliminar
  3. muy buen articulo :) me servira bastante

    ResponderEliminar
  4. Hola, pues recien veo este Blog , esta muy interesante. sigue posteando , te apoyo hermano, a la vez dejas muchas enseñanzas.

    ResponderEliminar
    Respuestas
    1. Hola Junior, gracias por comentar y claro, es es la idea seguir compartiendo, un saludo

      Eliminar
  5. Muy bueno tu blog hermano.

    ResponderEliminar
  6. Excelente ...
    Yo, empezando con Java.
    Traigo un problemilla que quizás puedas aclarar: Le pongo atributos varios a un texto dentro de un JTexPane, ¿Como puedo leer esos atributos carácter a carácter?

    ResponderEliminar
    Respuestas
    1. Hola, lo que puedes hacer es obtener toda la info en un String o StringBuffer y luego puedes investigar como aplicar el metodo charAt() para recorrer la cadena....... miralo por ese lado, espero te sirva ;)

      Eliminar
  7. Buenas amigoo yo eh conseguido dar formato a un jtexfeil en java pero a la hora de guardar al final solo guarda dos digitos.. es que el tipo de dato en la base de datos es Double... y al ingresar por ejemplo asi: 23.000 directamente lo guarda así 2.3 desde ya gracias y saludos..!!

    ResponderEliminar
    Respuestas
    1. Buena tarde Richard, cordial saludo:

      Disculpa, aún tienes el inconveniente manifestado?

      Quedo atento!

      Eliminar
  8. Muchisimas gracias, me sirvio de gran ayuda.

    ResponderEliminar
  9. Buenas tardes Cristian

    excelente tu aporte soy estudiante y apenas voy en marcha.

    saludos cordiales

    ResponderEliminar
  10. buenas tardes Cristian

    muy bueno su aporte
    soy estudiante y apenas estoy empezando, quería preguntar que si puede profundizar más sobre el jformatetextfield y el jtree, me seria de mucha ayuda...

    Gracias

    ResponderEliminar

Eres libre de realizar cualquier comentario, desde que pueda ayudar con gusto lo atenderé, y si es un critica, bienvenida sea!!!