Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / Sonidos y Eventos en Swing

Sonidos y Eventos en Swing

Por 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

Artículos similares

Uso de Arrays: Ejemplo práctico

En este post iremos conociendo de un modo práctico que es y como se utiliza un Array en java, para esto partiremos de un[...]

Cambiar API Level en Android Studio

Cuando desarrollamos aplicaciones en el IDE (Entorno de Desarrollo Integrado) de Android Studio, es importante indicar e[...]

Escritura y lectura de archivos CSV

Los archivos CSV (del inglés comma-separated values – separados por comas) son un tipo de documento en formato abi[...]

Laberinto del Terror (Código Fuente + juego)

El laberinto del terror es un juego en el que haciendo uso del ratón y de tu pulso de borracho debes cruzar distintos la[...]

Personlizar JTable: Header Table con iconos

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

Botones circulares de Google Plus en java

Continuación del tutorial «Google Circles en java» o.O 🙂 La Interfaz El proyecto consta de una sola interfaz la cual es[...]