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

Curso gratuito de programación Python de Microsoft

Microsoft el gigante de la tecnología está tratando de hacer que Python sea más fácil de comprender para aquellos intere[...]

Crear web multi-lenguaje con php

En este tutorial realizaremos un proyecto web de un «sitio multi lenguaje» o «web multi idiomas» como prefieran llamarlo[...]

Dibujando con Canvas

La clase Canvas (Lienzo)  de Android es una superficie que nos permite pintar figuras, texto e imágenes utilizando para[...]

Hola Mundo con Firebase

Firebase es la plataforma para el desarrollo de aplicaciones web y aplicaciones móviles de Google el cual se centra en e[...]

Crear instaladores para programas java con .NET

Continuando la serie de tutoriales para la creación de instaladores para programas escritos en Java, en esta oportunidad[...]

Juego: Adivina el número

Problema: Desarrollar un juego en consola con Kotlin que genere un numero aleatorio entre un rango preestablecido y perm[...]