jairogarcíarincón

Componentes: JEditorPane y JTextPane


9.65K

Introducción



En java hasta ahora hemos visto varios componentes visuales que nos permiten escribir texto o pedírselo al usuario, pero hay algunos más y cada uno es adecuado para una finalidad diferente:

  • JTextField: Un campo de texto que permite pedir/mostrar una sola línea de texto. No admite mezclar fuentes de texto, colores ni nada parecido. Es adecuado para pedir, por ejemplo, un nombre, un teléfono, etc.
  • JFormattedTextField. Como el anterior, pero más avanzado. Permite pedir datos, de una sola línea, que cumplan unas ciertas restricciones o un cierto formato. Es adecuado para pedir fechas, horas, direcciones IP, etc. Incluso para pedir datos numéricos si queremos controlar que no se puedan escribir letras.
  • JPasswordField: Este sirve para pedir una password. Sólo pinta asteriscos.
  • JTextArea. Este ya admite varias líneas de texto, pero es un editor simple. No admite mezclar fuentes de letra, cursivas, imágenes, etc. Todo el texto, en varias líneas, pero con una única fuente de letra.
  • JEditorPane. Este es más complejo que el anterior y admite texto con cierto formato. Admite texto plano, HTML y RTF por defecto, aunque podríamos ampliarlo. Este sí permite mezclar fuentes, colores e imágenes.
  • JTextPane. Este es el más complejo de todos. Admite lo mismo que el anterior, pero además permite que vayamos añadiendo texto cada uno con sus propios atributos de texto (fuentes, colores, etc.). Admite también directamente iconos de la clase Icon de java e incluso cualquier componente de Java, como JButton, etc.


Vamos a centrarnos en este capítulo en JEditorPane y JTextPane.

JEditorPane



El JEditorPane admite texto con cierto formato. Por defecto conoce el text/plain, text/html y text/rtf, aunque debemos decirle a priori qué es lo que va a usar.

El tipo text/plain es el tipo por defecto, así que si no indicamos nada, es el que se usará.

Si queremos construir otros formatos, debemos heredar de javax.swing.text.EditorKit y construirnos una clase definiendo todos los métodos abstractos, aunque aquí no lo vamos a hacer.

Para los formatos que java entiende, java nos proporciona clases que heredan de EditorKit y saben tratar los tipos de texto mencionados, pero el JEditorPane las maneja internamente y no nos enteraremos de su existencia, pero que sepas que son DefaultEditorKit, HTMLEditorKit y RTFEditorKit.

Y para aclararlo todo, vamos a ver un ejemplo de JEditorPane utilizando HTML:



JTextPane



JTextPane es otro editor que admite colores, fuentes, tamaños, etc. Admite incluso que el pongamos directamente iconos pasándole una clase Icon de java o que le añadamos un componente de java como JButton, JLabel, etc.

Para añadir texto, debemos ir añadiéndolo indicando en cada caso que "atributos" queremos para ese texto. Si lo queremos en negrita, con cierta fuente de letra, tamaño, color, etc.

El problema es que JTextPane no tiene métodos para ir añadiendo poco a poco el texto. Simplemente tienen un método setText() al que se pasa todo el texto de golpe. Para poder trabajar con el JTextPane, debemos pedirle el Document asociado con getDocument() y trabajar con él, que sí tiene métodos para ir añadiendo texto poco a poco.

Por ejemplo, para añadir un trozo de texto en negrita, otro de color rojo, un icono y un botón, haríamos lo siguiente:




Publicado el 21 de Octubre de 2021

interfacesusuariousabilidad