[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
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
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
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









xavier alias vieja dice:
Septiembre 26th, 2008 a las 6:52 pm
q buena esta la pagina cuando tenga alguna duda de hacer algo a donde te puedo escribir
enoc dice:
Noviembre 26th, 2008 a las 5:46 pm
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…
Cristian dice:
Noviembre 27th, 2008 a las 6:20 am
@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!