Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Sonidos y Eventos en Swing

Sonidos y Eventos en Swing

Autor jc mouse jueves, junio 14, 2012

La siguiente clase reproduce sonidos WAV en controles Swing de Java Netbeans, los controles son pasados en el constructor de la misma y estos pueden ser de tipo JButton, JLabel, JComboBox y JTextField, la clase asigna los eventos del mouse, teclado y si fuera necesario en caso del JCombo eventos de ItemListener, los sonidos en formato WAV, se encuentra en el paquete «/jcsonido/wav/».

import java.awt.Cursor;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JComboBox;
/**
 * @web https://www.jc-mouse.net
 * @author Mouse
 */
public class Sonido {
    //objetos soportados
    private JTextField JTextfield;
    private JLabel jLabel;
    private JComboBox jComboBox;
    private JButton jButton;
    private String Tipo = "";
    private Clip clip;
    //paquete donde se encuentran los archivos de sonido WAV
    private String path="/jcsonido/wav/";

    public Sonido(Object object)
    {
        //Eventos del raton
        MouseListener mouseListener = new MouseListener() {

        public void mouseClicked(MouseEvent evt) {
            if( Tipo.equals("JTextField") )
            {
                if( !JTextfield.isEditable() )
                    JTextfield.setEditable(true);
                JTextfield.selectAll();
                daleplay("clic");
            }
            if( Tipo.equals("JComboBox") )            
                daleplay("swing");
            if( Tipo.equals("JButton") )
                daleplay("beep");
            if( Tipo.equals("JLabel") )
                daleplay("chafez");
        }

        public void mouseEntered(MouseEvent evt) {
            if( Tipo.equals("JLabel"))
                daleplay("burro");
            else
                daleplay("water1");
        }

        public void mouseExited(MouseEvent evt) {
            if( Tipo.equals("JTextField") )
            {
                if( JTextfield.isEditable() )
                {
                    JTextfield.setEditable(false);
                    daleplay("bubble");
                }
            }
        }

        public void mousePressed(MouseEvent evt) {}

        public void mouseReleased(MouseEvent evt) {}
    };

    //EVENTOS DE TECLADO
    KeyListener  keyListener = new KeyListener(){

        public void keyTyped(KeyEvent e) {
         if( Tipo.equals("JTextField") )
            {
                if( JTextfield.isEditable() )                
                    daleplay("typetext");
                else
                    daleplay("locked");
            }                
        }

            public void keyPressed(KeyEvent e) {}

            public void keyReleased(KeyEvent e) {}
        };

    //Evento del JCombo cuando se realiza un cambio en un item
    ItemListener Itemlistener = new ItemListener () {
            public void itemStateChanged(ItemEvent e) {
                daleplay("out");
            }
        };

    //Dependiendo del objecto que se añada, se asignan eventos y variables
    if(object instanceof javax.swing.JTextField)
    {
       JTextfield  = (JTextField) object;
       JTextfield.addMouseListener(mouseListener);
       JTextfield.addKeyListener(keyListener);
       JTextfield.setEditable(false);
       JTextfield.setCursor(Cursor.getPredefinedCursor( Cursor.HAND_CURSOR ));
       this.Tipo = "JTextField";
    }
    else if(object instanceof javax.swing.JLabel)
    {
        jLabel = (JLabel) object;
        jLabel.addMouseListener(mouseListener);
        jLabel.setCursor(Cursor.getPredefinedCursor( Cursor.HAND_CURSOR ));
        this.Tipo = "JLabel";
    }
    else if(object instanceof javax.swing.JComboBox)
    {
        jComboBox = ((JComboBox) object);
        this.Tipo = "JComboBox";
        jComboBox.addMouseListener(mouseListener);
        jComboBox.addItemListener(Itemlistener);
    }
    else if(object instanceof javax.swing.JButton)
    {
        this.Tipo = "JButton";
        this.jButton = (JButton) object;
        this.jButton.addMouseListener(mouseListener);
    }

    }
    //metodo que reproduce un sonido del paquete WAV
    public void daleplay(String value)
    {        
       try
       {
   clip=AudioSystem.getClip();
   clip.open(AudioSystem.getAudioInputStream( getClass().getResourceAsStream( path +  value +".wav" ) ) );
          clip.start();
       }catch(Exception ex){
    System.err.println( ex.getMessage() );
        }
    }

}

Su implementación en la interfaz es sencilla, solo se debe crear una nueva instancia de la clase y pasar el control Swing donde queremos que se reproduzca el sonido. por ejemplo para agregar un control JButton, hacemos lo siguiente:

Sonido sonido = new Sonido(this.jButton1);

En el siguiente video bien cortito, pues ver  mejor a lo que me refiero, cuando se pasa el ratón sobre cualquier control, este suena, si se presiona sobre un JTextField se habilita para escritura y cada que tipeas una letra, sonara el audio como si de una maquina de escribir se tratara, lo mismo si se despliega la lista de un JCombo, reproduce un sonido, si se elige un nuevo item, tambien reproduce un sonido y así con el resto de los controles.

Si bien la utilidad que se le pueda dar a este código, es más de diversión que de otra cosa 🙂 pues en lo personal a mi los programas que suenan a cada momento no me gustan, de hecho tengo deshabilitado todos los sonidos de la PC que utilizo ;), a otras personas puede que les guste. Para gustos….

El código CLIC AQUI PARA DESCARGAR

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Imagenes en Access y Java

Imagenes en Access y Java

Aplicación en Java realida con el IDE de Netbeans 6.9 para trabajar con images en Base de Datos en Access 2003, el progr...

Crear plantillas personalizadas para Netbeans

Crear plantillas personalizadas para Netbeans

Cuando llevamos tiempo programando vamos armando un librería personal de código que utilizamos con frecuencia en nuestro...

JavaFX y ApiRest – GET

JavaFX y ApiRest – GET

En este tutorial construiremos una aplicación en JavaFX para leer datos de un servicio web Herramientas IDE Netbeans 8.x...

Tabla para inventarios de Entradas y Salidas

Tabla para inventarios de Entradas y Salidas

A veces navegando en la internet buscando novedades , investigando o simplemente perdiendo el tiempo 🙂 se encuentran cos...

JTable con imágenes

JTable con imágenes

En este post dejo una forma de como utilizar imágenes en un JTable ademas de implementar MouseListener para realizar dif...

Código Único de Factura en PHP

Código Único de Factura en PHP

Código Único de Factura para el Nuevo Sistema de Facturación Electrónica en Bolivia desarrollado en el lenguaje PHP 7 (H...

10 comentarios en “Sonidos y Eventos en Swing”

  1. wilberth dice:

    Que buen programa me sirvio de mucha utilidad

  2. Joseph dice:

    hermano cuando compilo el codigo no suenan los jtextfields y los botones nada suena que debo hacer ya que los sonidos se encuentran dentro del jar compilado

    1. Mouse dice:

      si te suenan desde el IDE y no desde el JAR es que no encuentra las rutas de los archivos de sonido

  3. Martín dice:

    Me dió una mejor idea de como trabajar con los Listeners.
    Gracias!

  4. charlybinn dice:

    Excelente material, al igual que a Martín, me ayudo a entender mejor los Listener, gracias por compartir Mouse =p

  5. jesus caycho dice:

    muy bueno el aplicativo, y muchas gracias por el aporte

  6. ARTURO dice:

    HOLA
    Mi problema es el siguiente: en el el proyecto todo funciona a la perfección pero al generar el .jar se alenta el programa con el sonido, si se oye pero la ejecución es lenta. Lo curioso es que me sucede en algunas computadoras y no en todas
    ¿Que puedo hacer para resolverlo?
    Intente con un hilo y ya no se alenta el programa pero si el sonido y obvio no suena acorde
    GRACIAS.

    1. Mouse dice:

      eso depende del hardware de la pc donde lo pruebas y tb del tamaño de la archivo que quieres reproducir, si el archivo es muy grande , es preferible que el archivo de audio no este dentro el propio JAR, cuando ejecutas el jar se carga en memoria el contenido del mismo y si los archivos son muy grande se satura la memoria

  7. Alex dice:

    Me sirvio de mucho lo que faltaria seria como hacer que del combobox reprodusca un genero seleccionado Ejemplo: baladas :»una baladas», Salsa: «Una salsa»…etc… como podria Realizar ese ejercicio ayuda Porfavor… :/

    1. Mouse dice:

      Hola 🙂 lo que tu quieres es un reproductor, tenemos ejemplos con Java Media Framework y con VLCJ

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

En muchas ocasiones es necesaria la personalización de componentes java para que estos se adecuen a nuestros requerimien...

En este post mostramos como personalizar el Header (encabezado) de un componente JTable en Java colocando iconos, centra...

El JTable de Java es un gran componente para mostrar datos en una tabla de una forma rápida y sencilla, sin embargo en v...

En este post veremos un ejemplo sencillo de como descargar desde Internet archivos de cualquier tipo (*.jpg, *.png, *.gi...

Herramientas

Generador de Enlaces a Whatsapp