Uso básico de elementos Swing con NetBeans – 27 – Uso de JSlider, regla interactiva.

Para este ejemplo veremos el uso básico de un “JSlider”, que es similar a una regla interactiva con valores numéricos o etiquetas que indican propiedades. En esta aplicación utilizaremos un Área de Texto junto con el JSlider. Específicamente el JSlider contendrá valores numéricos que representaran tamaños de fuentes, el Área de Texto contendrá dos párrafos que irán variando el tamaño de texto conforme desplacemos los valores más o menos en el JSlider.

Tomar en cuenta los nombres de variable de cada objeto, se especifican los nombres en el diseño. Esto es muy importante ya que desde los métodos se utilizan estos nombres para referencia a cada objeto. Se puede cambiar el “Nombre de variable” de cada objeto haciendo clic derecho sobre la misma y clic en “Cambiar nombre de variable…”. (clic sobre la imagen para ampliar)

Lista de importaciones que necesitamos para trabajar con ciertos objetos. Además los métodos llamados desde el constructor del JFrame.

Código Java
import java.awt.Font;

/**
*
* @author Ariel
*/

public class UsoJSlider extends javax.swing.JFrame {

/**
* Creates new form UsoJSlider
*/

public UsoJSlider() {
initComponents();
setLocationRelativeTo(null);//Centrar formulario
inicio();//Método de inicio
}

Para este ejemplo requerimos un único método que llamaremos al ejecutar el formulario y esto nos permitirá inicializar los objetos que agregamos en modo de diseño. Los métodos creados por nosotros las ubicamos al final de la declaración de variables, justo antes de la llave de cierre general. Se agregan comentario para aclarar la función de cada línea de código.

Código Java
private void inicio(){
//-Establecemos propiedades para el JTextArea-
//Establecemos tipo de fuente Consolas, texto plano, tamaño 15
jt.setFont(new Font("Consolas", Font.PLAIN, 16));
//Especificamos que el texto se ajusta al tamaño del Área de texto
jt.setLineWrap(true);
jt.setWrapStyleWord(true);
//Agregamos texto simple al Área de Texto como ejemplo.
//El indicador \n sirve para salto de línea.
jt.setText("Java Development Kit o (JDK), es un "
+ "software que provee herramientas de desarrollo "
+ "para la creación de programas en Java. "
+ "\nNetBeans IDE. Es un entorno de desarrollo integrado libre, "
+ "hecho principalmente para el lenguaje de programación Java.");

//Configurams el JSlider
//Valor mínimo
jl.setMinimum(8);
//Valor máximo
jl.setMaximum(44);
//valor inicial
jl.setValue(16);
//Valores para mostrar regla
//mínimo para mostrar
jl.setMinorTickSpacing(1);
//máximo para mostrar
jl.setMajorTickSpacing(4);
//Especificamos que se muestren los valores
jl.setPaintTicks(true);
jl.setPaintLabels(true);
}

Para el JSlider utilizamos el evento “StateChanged”, que nos permitirá capturar el valor cuando se deslice el marcador en la regla. En las primeras guías de la serie vimos cómo se implementan los eventos desde el entorno de diseño, si hay dudas se pueden consultar esas entradas.

Código Java
    private void jlStateChanged(javax.swing.event.ChangeEvent evt) {                                
//Obtenemos valor del JSlider
int value = jl.getValue();
//Indicamos las propiedades de fuente del JTextArea
//value será la que cambien según se mueva el marcador del JSlider.
jt.setFont(new Font("Consolas", Font.PLAIN, value));
}

En este punto ya podremos ejecutar nuestro formulario y comprobar su funcionalidad. (Por si hay alguna duda en el proceso, debemos hacer clic derecho sobre nuestro archivo fuente y presionar “ejecutar archivo” ya que nuestro proyecto no tiene una clase principal definida)

Uso básico de elementos Swing con NetBeans – 26 – Uso de JProgressBar, barra de progreso. Ejemplo 2.

En esta guía veremos el funcionamiento de la barra de progresos “JProgressBar” de uso habitual en ciertos procesos que requieren tiempo de ejecución controlada. Para este segundo ejemplo realizaremos algo un poco más complejo, específicamente aplicaremos una método que calcula números primos. Este método la hemos creado como ejemplo para el curso en modo consola, realizaremos pequeñas modificaciones para ajustarla a este propósito. Para el diseño utilizamos un JFrame, la nombramos “UsoJProgressBar2”. Podemos utilizar “JPanel” para ordenar los elementos de forma independiente. En vista de diseño vemos en uno de los paneles dos campos de texto con sus etiquetas más los botones de comando que servirán para poner en marcha la aplicación. Seguido la barra de progresos. Por último dentro de un panel el “JList” que mostrará los números primos que obtengamos.

Tomar en cuenta los nombres de variable de cada objeto, en el diseño se especifican; es muy importante ya que desde los métodos se utilizan estos nombres para referencia a cada objeto. Se puede cambiar el “Nombre de variable” de cada objeto haciendo clic derecho sobre la misma y clic en “Cambiar nombre de variable…”. (clic sobre la imagen para ampliar)

Lista de importaciones que necesitamos para trabajar con ciertos objetos. Además los métodos llamados desde el constructor del JFrame y variables de clase que necesitamos crear.

Código Java
package com.swing.basic;//tomar en cuenta el paquete del JFrame

import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;

/**
*
* @author Ariel
*/

public class UsoJProgressBar2 extends javax.swing.JFrame {

/**
* Creates new form UsoJProgressBar2
*/

public UsoJProgressBar2() {
initComponents();
setLocationRelativeTo(null);//Centrar formulario
inicio();//Método de inicio
}
private DefaultListModel modelList;//Variable de clase.

Creamos los métodos siguiente en modo fuente, los métodos creados por nosotros las ubicamos al final de la declaración de variables, justo antes de la llave de cierre general. Se agregan comentario para aclarar la función de cada línea de código.

Código Java
    private void inicio(){
//Especificamos algunas propiedades de nuestra lista
//Inicializamos la variable DefaultListModel
modelList = new DefaultListModel();
//Establecemos el modelo, nos permite agregar y eliminar elementos, etc.
lista.setModel(modelList);
//Intervalo de selección
lista.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
lista.setSelectedIndex(0);
lista.setVisibleRowCount(-1);
//Distribución horizontal
lista.setLayoutOrientation(JList.HORIZONTAL_WRAP);
//Limpiamos los campos de texto
desde.setText(null);
hasta.setText(null);
//Indicamos el valor que muestra JProgressBar al iniciar el programa
jpb.setValue(0);
}

private void iniciar(){
//Creamos un Thread para mejorar el ejemplo
final Thread t;
//Inicializamos
t = new Thread(new Runnable() {
//Implementamos el método run()
@Override
public void run() {
//Permite mostrar el valor del progreso
jpb.setStringPainted(true);
//Comprobamos que no esten vacíos los campos de texto
if(!desde.getText().isEmpty() && !hasta.getText().isEmpty()){
//Utilizamos try... por si falla la coversión numérica
try {
int d = Integer.parseInt(desde.getText());
int h = Integer.parseInt(hasta.getText());
//Verificamos que los datos numéricos sean mayor que cero-0
if(d > 0 && h > 0){
//Verificamos que h sea mayor que d
if(h > d){
//Establecemos el valor mínimo y máximo de nuestro barra de progreso
//Esta permitirá mostra el valor correcto del progreso
jpb.setMinimum(d);
jpb.setMaximum(h);
//Con un for iremos comprobando si el valor de i es primo
for (int i = d; i <= h; i++) {
//i será el valor de la barra de progreso en cada momento, esta se ira incrementando
jpb.setValue(i);
//Comprobamos que el valor sea primo por cada ciclo
if(!esPrimo(i)){
modelList.addElement(i);
}
//Hacemos una interrupción de 100 milisegundos
//Se puede disminuir o aumentar según se desee
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
}

} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Datos no numéricos" + e);
}
}
}
});
//Se ejecuta el Thread
t.start();
}
//Este método vimos su funcionamiento en modo consola
//La función recibe un entero como argumento para calcular si es primo
private boolean esPrimo(int n){
//inicializamos una variable boolean
boolean b = false;
//Los números negativos no entran como primos, el 1-uno tampoco
if(n <= 0 || n == 1){
b = true;
}
//El 2,3,5 son primos conocidos por tanto las obviamos
else if(n != 2 && n != 3 && n != 5){
//Con un for recorremos los números intermedios en 1 y n
//Comprobamos que el módulo con alguno de ellos de 0-cero
for (int i = 2; i < n; i++) {
//Si b es true, demuestra que n no es primo y salimos del bucle
if(b){
break;
}
b = (n%i == 0);
}
}
//2,3 y 5 son los primeros primos conocidos
else{
b = false;
}
return b;
}

Para los botones utilizamos el evento “ActionPerformed”. Si hay dudas sobre como agregar “Eventos” a objetos, en las primeras guías de la serie vimos con detalle ese punto.

Código Java
    private void iniciarActionPerformed(java.awt.event.ActionEvent evt) {                                        
iniciar();
}

private void limpiarActionPerformed(java.awt.event.ActionEvent evt) {
inicio();
}

En este punto ya podremos ejecutar nuestro formulario y comprobar su funcionalidad. (Por si hay alguna duda en el proceso, debemos hacer clic derecho sobre nuestro archivo fuente y presionar “ejecutar archivo” ya que nuestro proyecto no tiene una clase principal definida)

Uso básico de elementos Swing con NetBeans – 25 – Uso de JProgressBar, barra de progreso.

En esta guía veremos el funcionamiento de la barra de progresos “JProgressBar” de uso habitual en ciertos procesos que requieren tiempo de ejecución controlada. Como vemos en el diseño más abajo, creamos un formulario utilizando un JFrame, la nombramos “UsoJProgressBar”. Agregamos al formulario un “Botón” para lanzar nuestro método, el objeto “JProgressBar” y un “JTextArea” para mostrar el progreso de la ejecución.

Tomar en cuenta los nombres de variable de cada objeto, en el diseño se especifican; es muy importante ya que desde los métodos se utilizan estos nombres para referencia a cada objeto. Se puede cambiar el “Nombre de variable” de cada objeto haciendo clic derecho sobre la misma y clic en “Cambiar nombre de variable…”. (clic sobre la imagen para ampliar)

Para este ejemplo no se requiere de ninguna importación. Creamos los métodos siguiente en modo fuente, los métodos creados por nosotros las ubicamos al final de la declaración de variables, justo antes de la llave de cierre general. Se agregan comentario para aclarar la función de cada línea de código.

Código Java
    //Método que llamaremos desde nuestro botón
private void inicio(){
//Creamos un Thread para mejorar el ejemplo
final Thread t;
//Inicializamos
t = new Thread(new Runnable() {
//Implementamos el método run()
@Override
public void run() {
//Permite mostrar el valor del progreso
jPr.setStringPainted(true);
int x = 1;
//Utilizamos un while para emular el valor mínimo y máximo
//En este caso 0 - 100
while(x <= 100){
//Asignamos valor a nuestro JProgressBar por cada siclo del bucle
jPr.setValue(x);
//Valor que se mostrará en el JTextArea
salida.append("Progreso " + x + "%...\n");
//Hacemos una parada de medio segundo por cada siclo while
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
//Se incrementa el valor de x
x++;
}
}
});
//Se ejecuta el Thread
t.start();
}

Para el botón “Iniciar” utilizamos el evento “ActionPerformed”. Si hay dudas sobre como agregar “Eventos” a objetos, en las primeras guías de la serie vimos con detalle ese punto.

Código Java
    private void iniciarActionPerformed(java.awt.event.ActionEvent evt) {                                        
inicio();
}

Llegado a esta parte podremos ejecutar nuestro formulario. (Por si hay alguna duda en el proceso, debemos hacer clic derecho sobre nuestro archivo fuente y presionar “ejecutar archivo” ya que nuestro proyecto no tiene una clase principal definida).