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
Xdebug es una extensión para PHP que nos ayuda con la depuración y el desarrollo de aplicaciones. Contiene un depurador[...]
En ocasiones los administradores de sitios web experimentan problemas de lentitud en su carga o en el peor de los casos[...]
Para colocar un JCheckBox dentro una celda de un JTable debemos sobre escribir algunas clases para que el componente pue[...]
Si bien se pueden encontrar en google estilos java (Look and Feel) listos para cambiar la apariencia de nuestras aplicac[...]
Si necesitamos mostrar gráficos estadísticos en nuestras aplicaciones android, contamos con muchas librerías disponibles[...]
Tink es una biblioteca de cifrado desarrollada por un grupo de criptógrafos e ingenieros de seguridad de Google lanzado[...]