Suscribirse al Feed
13Dic

[código] GUIs en Java - áreas de texto, paneles y scrolls

(anterior) En esta sección se presentan varios de los componentes de Java para la creación de interfaces gráficas de usuario. Los componentes de Swing pueden personalizarse para asemejarse a la apariencia de la plataforma computacional en la que se ejecute el programa, o pueden usar la apariencia visual de Java para brindar una interfaz idéntica en cualquier Sistema Operativo. Esta sección se centra en el uso de lsa Areas de Texto, los paneles, y los scroll.

Como copiar texto seleccionado de un área de texto (JTextArea) a otra


// Cómo copiar texto seleccionado de un área de texto a otra.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DemoAreaTexto extends JFrame
{
   private JTextArea areaTexto1, areaTexto2;
   private JButton botonCopiar;

   // configurar GUI
   public DemoAreaTexto()
   {
      super( "Demostración de JTextArea" );

      Box cuadro = Box.createHorizontalBox();

      String cadena = "Ésta es una cadena de\ndemostración para\n" +
         "ilustrar cómo copiar texto\nde un área de texto a \n" +
         "otra, utilizando un\nevento externo";

      // establecer areaTexto1
      areaTexto1 = new JTextArea( cadena, 10, 15 );
      cuadro.add( new JScrollPane( areaTexto1 ) );

      // establecer botonCopiar
      botonCopiar = new JButton( "Copiar >>>" );
      cuadro.add( botonCopiar );
      botonCopiar.addActionListener(

         new ActionListener() {  // clase interna anónima 

            // establecer en areaTexto2 el texto seleccionado de areaTexto1
            public void actionPerformed( ActionEvent evento )
            {
               areaTexto2.append( areaTexto1.getSelectedText() );
            }

         } // fin de la clase interna anónima

      ); // fin de la llamada a addActionListener

      // establecer areaTexto2
      areaTexto2 = new JTextArea( 10, 15 );
      areaTexto2.setEditable( false );
      cuadro.add( new JScrollPane( areaTexto2 ) );

      // agregar cuadro al panel de contenido
      Container contenedor = getContentPane();
      contenedor.add( cuadro );   // colocar en in BorderLayout.CENTER

      setSize( 425, 200 );
      setVisible( true );

   } // fin del constructor de DemoAreaTexto

   public static void main( String args[] )
   {
      JFrame.setDefaultLookAndFeelDecorated(true);
      DemoAreaTexto aplicacion = new DemoAreaTexto();
      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }

} // fin de la clase DemoAreaTexto

Descargar código fuente

Una clase JPanel personalizada

(contiene dos clases)


// Uso de un objeto JPanel personalizado.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PruebaPanelPersonalizado extends JFrame
{
	private JPanel panelBotones;
	private PanelPersonalizado miPanel;
	private JButton botonCirculo, botonCuadrado;

	// configurar GUI
	public PruebaPanelPersonalizado()
	{
		super( "Prueba de PanelPersonalizado" );
		// crear área personalizada de dibujo
		miPanel = new PanelPersonalizado();
		miPanel.setBackground( Color.GREEN );

		// establecer botonCuadrado
		botonCuadrado = new JButton( "Cuadrado" );
		botonCuadrado.addActionListener(
			new ActionListener()
			{
				 // clase interna anónima
				 // dibujar un cuadrado
				 public void actionPerformed( ActionEvent evento )
				 {
				 	miPanel.dibujar( PanelPersonalizado.CUADRADO );
				 }
			} // fin de la clase interna anónima
		); // fin de la llamada a addActionListener

		botonCirculo = new JButton( "Círculo" );
		botonCirculo.addActionListener(
			new ActionListener()
			{
				// clase interna anónima
				// dibujar un círculo
				public void actionPerformed( ActionEvent evento )
				{
					miPanel.dibujar( PanelPersonalizado.CIRCULO );
				}
			} // fin de la clase interna anónima
		); // fin de la llamada a addActionListener
		// establecer panel con botones
		panelBotones = new JPanel();
		panelBotones.setLayout( new GridLayout( 1, 2 ) );
		panelBotones.add( botonCirculo );
		panelBotones.add( botonCuadrado );

		// adjuntar panel de botones y área personalizada de dibujo al panel de contenido
		Container contenedor = getContentPane();
		contenedor.add( miPanel, BorderLayout.CENTER );
		contenedor.add( panelBotones, BorderLayout.SOUTH );
		setSize(300,150);
		setVisible(true);
	} // fin del constructor PruebaPanelPersonalizado
	public static void main( String args[] )
	{
		JFrame.setDefaultLookAndFeelDecorated(true);
		PruebaPanelPersonalizado aplicacion = new PruebaPanelPersonalizado();
		aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	}
} // fin de la clase PruebaPanelPersonalizado
// Una clase JPanel personalizada.
import java.awt.*;
import javax.swing.*;

public class PanelPersonalizado extends JPanel {
   public final static int CIRCULO = 1, CUADRADO = 2;
   private int figura;

   // usar figura para dibujar un óvalo o rectángulo
   public void paintComponent( Graphics g )
   {
      super.paintComponent( g );

      if ( figura == CIRCULO )
         g.fillOval( 50, 10, 60, 60 );
      else if ( figura == CUADRADO )
         g.fillRect( 50, 10, 60, 60 );
   }

   // establecer valor de figura y repintar PanelPersonalizado
   public void dibujar( int figuraADibujar )
   {
      figura = figuraADibujar;
      repaint();
   }

} // fin de la clase PanelPersonalizado

Descargar código fuente

Una clase JPanel auto contenida que maneja sus propios eventos de ratón

(contiene dos clases)

// Creación de una subclase autocontenida de JPanel que procesa
// sus propios eventos de ratón.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PruebaPanelAutoContenido extends JFrame
{
   private PanelAutoContenido miPanel;

   // configurar GUI y manejadores de eventos de movimiento del ratón p/la ventana de la aplicación
   public PruebaPanelAutoContenido()
   {
      // establecer un PanelAutoContenido
      miPanel = new PanelAutoContenido();
      miPanel.setBackground( Color.YELLOW );

      Container contenedor = getContentPane();
      contenedor.setLayout( new FlowLayout() );
      contenedor.add( miPanel );

      // establecer manejo de eventos de movimiento del ratón
      addMouseMotionListener(

         new MouseMotionListener() {  // clase interna anónima

            // manejar evento de arrastrar el ratón
            public void mouseDragged( MouseEvent evento )
            {
               setTitle( "Arrastrando: x=" + evento.getX() +
                  "; y=" + evento.getY() );
            }

            // manejar evento de mover el ratón
            public void mouseMoved( MouseEvent evento )
            {
               setTitle( "Moviendo: x=" + evento.getX() +
                  "; y=" + evento.getY() );
            }

         } // fin de la clase interna anónima

      ); // fin de la llamada a addMouseMotionListener

      setSize( 300, 200 );
      setVisible( true );

   } // fin del constructor de PruebaPanelAutoContenido

   public static void main( String args[] )
   {
      JFrame.setDefaultLookAndFeelDecorated(true);
      PruebaPanelAutoContenido aplicacion = new PruebaPanelAutoContenido();
      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }

} // fin de la clase PruebaPanelAutoContenido
// Una clase JPanel autocontenida que maneja sus propios eventos de ratón.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PanelAutoContenido extends JPanel
{
   private int x1, y1, x2, y2;

   // establecer manejo de eventos de ratón para PanelAutoContenido
   public PanelAutoContenido()
   {
      // establecer componente de escucha de eventos de ratón
      addMouseListener(

         new MouseAdapter() {  // clase interna anónima 

            // manejar evento de oprimir botón del ratón
            public void mousePressed( MouseEvent evento )
            {
               x1 = evento.getX();
               y1 = evento.getY();
            }

            // manejar evento de soltar botón del ratón
            public void mouseReleased( MouseEvent evento )
            {
               x2 = evento.getX();
               y2 = evento.getY();
               repaint();
            }

         } // fin de la clase interna anónima

      ); // fin de la llamada a addMouseListener

      // establecer componente de escucha de movimientos del ratón
      addMouseMotionListener(

         new MouseMotionAdapter() {  // clase interna anónima

            // manejar evento de arrastrar el ratón
            public void mouseDragged( MouseEvent evento )
            {
               x2 = evento.getX();
               y2 = evento.getY();
               repaint();
            }

         } // fin de la clase interna anónima

      ); // fin de la llamada a addMouseMotionListener

   } // fin del constructor de PanelAutoContenido

   // devolver anchura y altura preferidas de PanelAutoContenido
   public Dimension getPreferredSize()
   {
      return new Dimension( 150, 100 );
   }

   // pintar un óvalo en las coordenadas especificadas
   public void paintComponent( Graphics g )
   {
      super.paintComponent( g );

      g.drawOval( Math.min( x1, x2 ), Math.min( y1, y2 ),
         Math.abs( x1 - x2 ), Math.abs( y1 - y2 ) );
   }

} // fin de la clase PanelAutoContenido

Descargar código fuente

Uso de un objeto JSlider

(contiene dos clases)

// Uso de objetos JSlider para ajustar el tamaño de un óvalo.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class DemoSlider extends JFrame {
   private JSlider sliderDiametro;
   private PanelOvalo miPanel;

   // configurar GUI
   public DemoSlider()
   {
      super( "Demostración de JSlider" );

      // establecer PanelOvalo
      miPanel = new PanelOvalo();
      miPanel.setBackground( Color.YELLOW );

      // establecer objeto JSlider para controlar el valor del diámetro
      sliderDiametro =
         new JSlider( SwingConstants.HORIZONTAL, 0, 200, 10 );
      sliderDiametro.setMajorTickSpacing( 10 );
      sliderDiametro.setPaintTicks( true );

      // registrar componente de escucha de eventos de JSlider
      sliderDiametro.addChangeListener(

         new ChangeListener() {  // clase interna anónima

            // manejar cambio en el valor del control deslizable
            public void stateChanged( ChangeEvent e )
            {
               miPanel.establecerDiametro( sliderDiametro.getValue() );
            }

         } // fin de la clase interna anónima

      ); // fin de la llamada a addChangeListener

      // adjuntar componentes al panel de contenido
      Container contenedor = getContentPane();
      contenedor.add( sliderDiametro, BorderLayout.SOUTH );
      contenedor.add( miPanel, BorderLayout.CENTER );

      setSize( 220, 270 );
      setVisible( true );

   } // fin del constructor de DemoSlider

   public static void main( String args[] )
   {
      JFrame.setDefaultLookAndFeelDecorated(true);
      DemoSlider aplicacion = new DemoSlider();
      aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   }

} // fin de la clase DemoSlider
// Una clase JPanel personalizada.
import java.awt.*;
import javax.swing.*;

public class PanelOvalo extends JPanel {
   private int diametro = 10;

   // dibujar un óvalo del diámetro especificado
   public void paintComponent( Graphics g )
   {
      super.paintComponent( g );

      g.fillOval( 10, 10, diametro, diametro );
   }

   // validar y establecer el diámetro, después repintar
   public void establecerDiametro( int nuevoDiametro )
   {
      // si el diámetro es inválido, usar valor predeterminado de 10
      diametro = ( nuevoDiametro >= 0 ? nuevoDiametro : 10 );
      repaint();
   }

   // utilizado por el administrador de esquemas para determinar el tamaño preferido
   public Dimension getPreferredSize()
   {
      return new Dimension( 200, 200 );
   }

   // utilizado por el administrador de esquemas para determinar el tamaño mínimo
   public Dimension getMinimumSize()
   {
      return getPreferredSize();
   }

} // fin de la clase PanelOvalo

Descargar código fuente

Etiquetas: , ,
Los ejercicios utilizados en este post están basados en ejemplos del libro Cómo programar en Java de Deitel, y por lo tanto están bajo la licencia que esta editorial disponga.

4 Comentarios para “[código] GUIs en Java - áreas de texto, paneles y scrolls”

  1. a gravatar

    xavier alias vieja dice:  


    q buena esta la pagina cuando tenga alguna duda de hacer algo a donde te puedo escribir

  2. a gravatar

    enoc dice:  


    Tu pagina es interesante , Estoy aprediendo a utilizar los beneficios de java swing pero tengo dudas a la hora de crear los paneles es decir , quiero deplegar una ventana el la cual el usuario escriba el nombre del archivo de texto y despliegue ese archivo en la pantalla, lo de leer archivos lo tengo , pero presento dificultad al momento de crear mi panel para la captura .. espero que no molestar y q sea de provecho su ayuda…

  3. a gravatar

    Cristian dice:  


    @enoc, no entiendo muy bien la duda que tienes. Sin embrago, si ya llevas algo de código puedes plantear tu problema en el subforo de Java del Foro de elhacker.net.

    Un saludo!

 

 

Antes de comentar... recuerda que no hago tareas

Te invito a subscribirte al feed RSS. ¿No sabes que es un lector de Feeds?

© 2007 - 2008 Dezinerfolio. Todos los derechos reservados.
Powered by Wordpress. Entradas RSS