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
Tercera parte del tutorial [Crea tu blog con el patrón MVC y php] En este post trabajaremos en el Theme del blog, agrega[...]
El reconocimiento óptico de caracteres o OCR (Optical Character Recognition), es un proceso dirigido a la digitalización[...]
Hola, en este oportunidad dejo a disposición un formulario de logueo que se me ocurrió de repente creo inspirado en las[...]
Para quienes hayan trabajado con JMF saben que es una librería de Java desarrollada por Sun Microsystems para facilitar[...]
Continuando con estos post de Cliente/Servidor, en esta oportunidad realizaremos un ejemplo usando un dispositivo móvil[...]
Hola 🙂 En este video tutorial veremos como crear y usar parámetros en reportes con JasperSoft Studio, la base de datos q[...]