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

Arreglos en Visual Basic

Arreglos en Visual Basic

Un array es un conjunto finito y ordenado de elementos homogeneos. Ordenado porque los elementos n-esimo de un array pue...

Construye tu aplicación de mensajeria

Construye tu aplicación de mensajeria

En este post crearemos una aplicación sencilla para mandar mensajes de texto desde android. Necesitamos IDE: Eclipse + S...

Crear ayuda HTML para programa con JavaFX Swing

Crear ayuda HTML para programa con JavaFX Swing

En este post veremos como crear una aplicación de ayuda al usuario similar al extinto javahelp. Pero en esta oportunidad...

Generador de Texto ASCII .:. Solo Código

Generador de Texto ASCII .:. Solo Código

ASCII acrónimo inglés de American Standard Code for Information Interchange (Código Estándar Estadounidense para el Inte...

Control de versiones con GIT y Netbeans

Control de versiones con GIT y Netbeans

Control de versiones: Se llama control de versiones a la gestión de los diversos cambios que se realizan sobre los eleme...

SQLite: Encriptación de datos

SQLite: Encriptación de datos

SQLite es un sistema de gestión de bases de datos relacional,  escrita en C, si se desea hacer uso de encriptación con S...

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

Quasar es un proyecto Open Source basado en el Framework Vue que nos permite desarrollar proyectos de todo tipo, por eje...

Continuando el post de «Introducción a Retrofit» donde realizamos una breve preparación a lo que es el uso de la librerí...

Editar un documento PDF no es tan sencillo como editar un archivo de texto por ejemplo, para editar archivos PDFs necesi...

¿Alguna vez tuviste la necesidad de hacer una captura de pantalla de una página web? Si es así, seguramente buscaste y d...

Herramientas

Generador de Enlaces a Whatsapp