[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
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.
13 Comentarios | deja el tuyo



q buena esta la pagina cuando tenga alguna duda de hacer algo a donde te puedo escribir
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…
@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!
Oye eres genial crees q puedes acerme un Espiral mira q no me sale d ninguna forma porfavor t lo pido saludes.
ta chida tu pagina
Que tal, una pregunta ¿para qué es exactamente super.paintComponent(g) ?
Porque me doy cuenta de que en el método paintComponent siempre es la primera instrucción.
Saludos.
Hola ChXt0,
El super.paintComponent(g) se usa para pasar el objeto tipo Graphics que permitirá que las cosas se muestren en la super clase, es decir, que se muestren en el panel. El método paintComponent es el equivalente al viejo método paint() que se manejaba en AWT.
Un saludo!
disculpa xfas me ayudar en hacer o indicarme cómo hacer uan barra de progreso para indicar el tiempo que un jugador tiene para jugar en est caso lo deseo formar una palabra en Scrabble…gracias!!
bastante util tu info
si tienes mas clases para crear interfases graficas… subelas porfavor
agregando a favoritos
Gracias al contenido de tu pagina pude hacer un paint que tenia de tarea
Muchas Gracias
disculpa podrias enviarme un ejemplo de uso de jmenu no c si este bien pero quiero usar un jpanel para que cuando el usuario elija una accion del menu muestre los componentes de dicha accion y cuando elija ottra accion borre lo mostrado y me muestre el otro jpanel con los componentes indicados no c Jlabel y jtextfields te agradecere,
para info de metodos i clases:
http://java.sun.com/javaee/6/docs/api/
y no molesten al chaval.
Grácias.
m’equivoque, ahora si:
http://java.sun.com/j2se/1.5.0/docs/api/