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
En este ejemplo tenemos un array en JSON el cual representa una lista de alumnos y queremos llevar este a una lista en j[...]
A veces se necesita utilizar archivos de texto plano como contenedor de registros como si de una base de datos se tratar[...]
En este post crearemos un botón swing que reproducirá un sonido cuando este sea presionado por el usuario. Sin mas[...]
JTable es un componente swing java que nos permite mostrar datos en una tabla de una base de datos, sin embargo a difere[...]
Cuando tenemos dominio web pero aun no tenemos el contenido listo es común colocar en su lugar una simple web de aviso q[...]
En este post personalizaremos un componente JComboBox para que sus elementos acepten tablas (JTable) en lugar de texto s[...]