42. Control para boton deslizante

Tenemos un control que nos sirve como boton deslizante y este esta definido como "JSlider". Este nos servira para seleccionar valores deslizando un boton desde un extremo a otro.

Para el constructor de este objeto, tenemos que tener en cuenta una cosa, en su parametro, deberemos indicarle el punto minimo, el punto maximo y opcionalmente el valor por defecto, quedaria asi:

 

JSlider(int minimo, int maximo, int predeterminado)

 

Como el ejercicio que vamos a crear trataremos sobre tres botones deslizantes para aplicar color de fondo a nuestra ventana, debemos tener en cuenta la gama de colores. Utilizaremos los colores estandar RGB (Rojo, Verde, Azul), esta gama, cada color se define por unos minimos y unos maximos en su escala de colores, por ejemplo, si queremos el color negro, tanto el rojo, como el verde, como el azul deberan tener un minimo de 0, sin embargo, si queremos un color blanco, todos los colores deberan tener 255 que es el tope que admite los RGB.

Entonces, vamos a crear una clase llamada "BotonDeslizante" que contendra ya el metodo "main" y pondremos e importaremos sus controles:

 

Clase BotonDeslizante

 

import javax.swing.*;
 
public class BotonDeslizante extends JFrame{
 
    JSlider btnRojo, btnVerde, btnAzul;
    JLabel  rRojo, vVerde, aAzul;
 
    public BotonDeslizante(){
        this("Boton deslizante",0,0,300,200);
    }
 
    public BotonDeslizante(String titulo, int x, int y, int w, int h){
        super(titulo);
        this.getContentPane().setLayout(null);
        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        this.setBounds(x,y,w,h);
        this.setVisible(true);
 
        JLabel lblRojo = new JLabel("Rojo");
            lblRojo.setBounds(10,10,80,20);
            this.getContentPane().add(lblRojo);
        btnRojo = new JSlider(0,255);
            btnRojo.setBounds(70,10,120,20);
            this.getContentPane().add(btnRojo);
        rRojo = new JLabel("R");
            rRojo.setBounds(230,10,80,20);
            this.getContentPane().add(rRojo);
 
        JLabel lblVerde = new JLabel("Verde");
            lblVerde.setBounds(10,40,80,20);
            this.getContentPane().add(lblVerde);
        btnVerde = new JSlider(0,255);
            btnVerde.setBounds(70,40,120,20);
            this.getContentPane().add(btnVerde);
        vVerde = new JLabel("V");
            vVerde.setBounds(230,40,80,20);
            this.getContentPane().add(vVerde);
 
        JLabel lblAzul = new JLabel("Rojo");
            lblAzul.setBounds(10,70,80,20);
            this.getContentPane().add(lblAzul);
        btnAzul = new JSlider(0,255);
            btnAzul.setBounds(70,70,120,20);
            this.getContentPane().add(btnAzul);
        aAzul = new JLabel("A");
            aAzul.setBounds(230, 70, 80, 20);
            this.getContentPane().add(aAzul);
 
            btnRojo.addChangeListener(new GestorColor(this));
            btnVerde.addChangeListener(new GestorColor(this));
            btnAzul.addChangeListener(new GestorColor(this));
 
        paintComponents(getGraphics());
 
    }
 
    public static void main(String[]args){
 
        BotonDeslizante bd = new BotonDeslizante();
 
    }
}
 
 
Fijate como en su parametro, añadimos el minimo 0 y el maximo 255. Ahora crearemos la clase llamada "GestorColor" e implementaremos un nuevo boton de escucha llamado "ChangeListener" y pondremos su metodo abstracto que es:
 
public void stateChanged(ChangeEvent event){
 
}
 
Y en este metodo, pondremos las operaciones con los controles de deslizamiento. Quedara asi la clase:
 
Clase GestorColor
 
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.Color;
 
public class GestorColor implements ChangeListener{
 
    BotonDeslizante bd;
 
    public GestorColor(BotonDeslizante bd){
        this.bd = bd;
    }
 
    public void stateChanged(ChangeEvent event){
        Color c = new Color(bd.btnRojo.getValue(), bd.btnVerde.getValue(), bd.btnAzul.getValue());
        bd.getContentPane().setBackground(c);
 
        bd.rRojo.setText(Integer.toString(bd.btnRojo.getValue()));
        bd.vVerde.setText(Integer.toString(bd.btnVerde.getValue()));
        bd.aAzul.setText(Integer.toString(bd.btnAzul.getValue()));
    }
 
}

 

Creando un objeto de la clase Color que tenemos que importar tambien, obtenemos mediante el metodo "getValue()" los valores relacionados con los botones de deslizamiento, asi luego, poderlos aplicar en forma de color a nuestro contenedor de la ventana (el fondo).

Tambien debes saber, que si tuvieras ademas de los botones de deslizamiento otro boton normal, y quisieras implementarlo en esta misma clase, tambien puedes hacerlo, pues, para implementar, siempre puedes agregar mas, mira:

 

public class GestorColor implements ChangeListener, ActionListener{

 

}

 

He añadido dos implementaciones a la clase.

Este control no sirve unicamente para cambiar el color, si piensas bien, te puede servir para muchas cosas mas, date cuenta que son deslizadores aplicando un valor, esto te puede servir para muchas cosas mas.

No solo con el deslizador, con todo lo que hemos aprendido hasta ahora, con mucha practica, puedes hacer cosas bastante buenas. No te limites solo a lo que has estado viendo aqui, investiga!.

Contacto

ProgramandoJava cabillo@hotmail.es