Tutorial de Java

Texto

Anterior | Siguiente

Swing también introduce nuevos componentes dentro de la manipulación de textos. Así la clase JTextArea actúa como sustituto de la clase TextArea del AWT, la clase JTextField sustituye TextField del AWT y se incorporan las clases JPasswordField que viene a ser equivalente al uso de JTextField junto con el método setEchoChar(), y la clase JTextPane que permite que se presente el texto con diferentes fuentes de caracteres, colores, tamaños, etc.

El cambio de las características del texto que se presenta se realiza a través de estilos. Un estilo es un conjunto de características como son FontSize, ForegroundColor, isBold, isItalic, etc. y se manipula a través de constantes, como muestra la línea siguiente:

    StyleConstants.setForeground( estilo,Color.red )

El componente JTextPane, que es el que permite estos cambios siempre tiene un estilo por defecto como modelo, DefaultStyleDocument. En la figura siguiente, la primera línea se ha escrito nada más arrancar el programa, es decir, con el estilo por defecto de la aplicación, y las siguientes se intodujeron cambiando al estilo correspondiente al color del texto.

Los estilos se pueden aplicar a todo un documento o solamente a parte de él. El estilo por defecto, DefaultStyleDocument tiene un StyleContext que es el que puede manejar estilos diferentes. El ejemplo java1409.java, cuya imagen se mostraba antes, fija varios estilos y permite que se seleccione cualquiera de ellos para la introducción del texto.

import java.awt.*;
import java.awt.event.*;
import com.sun.java.swing.*;
import com.sun.java.swing.text.*;

public class java1409 extends JPanel implements ActionListener {
  private Style estiloRojo,estiloVerde,estiloAzul;
  private JTextPane texto;
    
  public java1409() {
    setLayout( new BorderLayout() );
    add( creaMenu(),BorderLayout.NORTH );
    
    JTextPane texto = creaEditor();
    add( texto,BorderLayout.CENTER );      
  }
  
  private JMenuBar creaMenu() {
    JMenuBar menu = new JMenuBar();
    JMenu estilo = new JMenu( "Estilo" );
    menu.add( estilo );
    
    JMenuItem mi = new JMenuItem( "Rojo" );
    estilo.add( mi );
    mi.addActionListener( this );
    
    mi = new JMenuItem( "Verde" );
    estilo.add( mi );
    mi.addActionListener( this );
    
    mi = new JMenuItem( "Azul" );
    estilo.add( mi );
    mi.addActionListener( this );
    
    return( menu );
  }
    
  public void actionPerformed( ActionEvent evt ) {
    Style estilo = null;
    String color = (String)evt.getActionCommand();
    
    if( color.equals( "Rojo" ) ) {
      estilo = estiloRojo;
    } else if( color.equals( "Azul" ) ) {
      estilo = estiloAzul;
    } else if( color.equals( "Verde" ) ) {
      estilo = estiloVerde;
    }
    texto.setCharacterAttributes( estilo,false );
  }
  
  private JTextPane creaEditor() {
    StyleContext sc = creaEstilos();
    DefaultStyledDocument doc = new DefaultStyledDocument( sc );
    
    return( texto = new JTextPane( doc ) );
  }
  
  private StyleContext creaEstilos() {
    StyleContext sc = new StyleContext();
    
    estiloRojo = sc.addStyle( null,null );
    StyleConstants.setForeground( estiloRojo,Color.red );
    
    estiloVerde = sc.addStyle( null,null );
    StyleConstants.setForeground( estiloVerde,Color.green );
    StyleConstants.setFontSize( estiloVerde,24 );
    
    estiloAzul = sc.addStyle( null,null );
    StyleConstants.setForeground( estiloAzul,Color.blue );
    
    return( sc );
  }
  
  public static void main( String argv[] ) {
    JFrame ventana = new JFrame( "Tutorial de Java, Swing" );
    
    ventana.addWindowListener( new WindowAdapter() {
      public void windowClosing( WindowEvent evt ){
	System.exit( 0 );
      }
    } );
    ventana.getContentPane().add( new java1409(),BorderLayout.CENTER );
    ventana.setSize( 300,180 );
    
    ventana.setVisible( true );
  }
}

Swing también incorpora receptores de eventos de conveniencia, es decir, que se pueden utilizar para que hagan las cosas solos, por ejemplo StyledEditorKit dispone de un ActionListener que realiza todo lo que debe realizar el método actionPerformed(), sin necesidad de intervención del programador. Estos receptores se pueden añadir a cualquier componente, por ejemplo, a un MenuItem, de la siguiente forma:

  ActionListener a = new StyledEditorKit.ForegroundAction(
    "set-foreground-red",Color.red );
  mi.addActionListener( a );

Navegador

Home | Anterior | Siguiente | Indice | Correo