java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JScrollPane
JScrollPane es un contenedor para componentes que necesiten redimensionarse a través una barra deslizable tanto vertical como horizontalmente, el componente no cambian su tamaño original solo lo que se muestra al final en la pantalla.
Seguramente todos habremos deslizado miles a lo largo de nuestra experiencia con computadoras, sobretodo en internet.
Ejemplo de JScrollPane como contenedor de un JTextArea:
La manera de agregar un componete a un contenedor es siempre la misma y este a su vez necesita ser puesto en otro contenedor o ventana.
Una vez creado el componente y el contenedor JScrollPane la manera de meterlo es con el método setViewPortView(Componente) en lugar de "add":
- JLabel etiqueta = new JLabel(); //Creamos una etiqueta
- Icon imagen = new ImageIcon ("src/imagen01.jpg"); //Creamos una IconImage
- etiqueta.setIcon (imagen); //Ponemos la imagen en la etiqueta
- JScrollPane scroll = new JScrollPane(); //Creamos el contenedor JScrollane
- scroll.setViewportView(etiqueta); //Ponemos la etiqueta en el contenedor
- add(scroll); //agregamos el scroll a otro contenedor o marco
Un Pequeño ejemplo con código:
import java.awt.*;
import javax.swing.*;
public class Barra
extends JFrame{
-
-
public Barra(){
super("Ejemplo Scroll Pane");
setSize(250,200);
setLocationRelativeTo(null);
setDefaultCloseOperation
(JFrame.
EXIT_ON_CLOSE);
// agregando el scrollpane al area de texto
panelDeslizable.setViewportView(areaTexto);
// agregando a la ventana el contenedor scrollpane
-
setVisible(true);
}
public static void main
(String[] args
) {
new Barra();
}
} // Fin de la Clase
El resultado en pantalla será:
Métodos:
- setViewportView(Component cualquiera)
- Agregamos al contendor el componente a scrolear.
- JScrollPane miScrollPane = new JScrollPane();
- miScrollPane.setViewportView(miComponenteGrande);
- setComponentOrientation(ComponentOrientation co)
- Determina la orientacion del componente y con eso la posición(a la derecha o izquierda) de la barra deslizable
- Los posibles valores de "co" serán:
- java.awt.ComponentOrientation.LEFT_TO_RIGHT
- java.awt.ComponentOrientation.RIGHT_TO_LEFT
- java.awt.ComponentOrientation.UNKNOWN
- setVerticalScrollBarPolicy(int policy)
- Determina como se visualiza la barra deslizable vertical
- Los posible valores del entero "policy" son:
- JScrollPane.VERTICAL_SCROLLBAR_ALWAYS
- JScrollPane.VERTICAL_SCROLLBAR_NEVER
- JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED
- setHorizontalScrollBarPolicy(int policy)
- igual al anterior pero con la barra horizontal
- Los posible valores del entero "policy" son:
- JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS
- JScrollPane.HORIZONTAL_SCROLLBAR_NEVER
- JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED
Todos los demás constructores, atributos y métodos en la documentación oficial de java
aquí.
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JProgressBar
La clase JProgressBar nos trae una barra de progreso, el problema de este componente Swing es que es necesario entender como funcionan un poquito los "Hilos" o "Thread" (en inglés) que permite que la aplicación ejecute varias tareas en simultaneo como para ir teniendo una idea...
Una barra de progreso se ve asi si es determinada:
O si el progreso no está definido puede ser del tipo indeterminado:
Veamos con el siguiente ejemplo.
-
La barra de progreso tiene que ser activada a partir de un momento (puede ser desde el inicio mismo de la aplicación) obtaremos por que sea a través de un boton.
-
Este boton tiene que estar vigilado por un "Escuchante" para saber cuando se produce el evento.
-
Y dentro de las operaciones del mismo evento crearemos un nuevo objeto de la clase Thread (un nuevo hilo) y lo empezamos a hacer que ejecute sus operaciones con el método start que a partir de ese instante el hilo estara funcionando.
-
Como parametro del nuevo hilo llamaremos al constructor de otra clase que crearemos y llamaremos "Hilo"
-
Esta pequeña clase es hija de Runnable ya que sobreescribiremos el método de esta interface llamado run().
-
Dentro del método "correr", que ejecutara cosas, se darña un loop for, de 0 a 100 coincidiendo con los valores mínimos y máximos de la barra de progreso y se irá incrementando de 1 en 1.
-
Para lo cual en cada incremento se volvera a configurar el valor de la barra con el método setValue(int n), se vuelve a mostrar en pantalla con el valor actualizado con el método rePaint()
-
Por último pero no menos importante, dentro de un bloque try-cath porque se generarám excepciones, haremos que el hilo(Thread) descanse su ejecución unos milisegundo específicos pero el progreso será constante.
Código:
import javax.swing.*;
import java.awt.event.*;
public class Progreso {
public static void main
(String[] args
){
marco.setSize(300, 100);
marco.setResizable(false); //no permite cambiar el tamaño de la ventana
marco.setLocationRelativeTo(null); //aparece en el centro de la pantalla
marco.
setDefaultCloseOperation(JFrame.
EXIT_ON_CLOSE);
barra.setBounds(5, 10, 280, 25); //configura posicion x, posicion y
pulsame.setBounds(5, 40, 140, 25); // ancho y alto
salir.setBounds(150, 40, 140, 25);
barra.setStringPainted(true); //Agrega el porcentaje en la barra
pulsame.addActionListener(new Pulsar());
salir.addActionListener(new Salir());
panel.setLayout(null); //no aplicamos un gestor de diseño, los componentes tienen su propio lugar determinado, por defecto es flowlayout
panel.add(barra);
panel.add(pulsame);
panel.add(salir);
marco.add(panel);
marco.setVisible(true);
}
@Override
new Thread(new Hilo
()).
start();
pulsame.setEnabled(false);
}
}
@Override
}
}
public static class Hilo
implements Runnable{
@Override
public void run(){
for (int i=0; i<=100; i++){
barra.setValue(i); //cambia el estado de la barra en i unidades
barra.repaint(); //"repinta" el estado de la barra a el actual
try{
Thread.
sleep(50); //relentiza el hilo 50 milisegundos
}
}
}
}
Resultado en pantalla:
Mètodos:
- setIndeterminate(boolean newValue)
- Determina si se trata de una barra indeterminada haciendolo true.
- setMaximum(int n)
- configura el valor máximo
- setMinimum(int n)
- configura el valor mínimo
- setStringPainted(boolean b)
- muestra el valor expresado en numeros dentro de la misma barra
- setValue(int n)
- configura el valor de la barra de progreso