Imagenes:
dentro de nuestro proyecto crearemos un JFrame form y en modo diseñador utilizaremos 4 JLabels, 1 JPanel, 1 JTextField y JButton.
los re-nombramos para poderlos identificar mas facilmente, yo los llame así:
JLabel jLabel2;//esta sera la etiqueta del JTextField
JPanel jPanel1;
JButton jbmover;//mientras no se presione no se podrán mover las imágenes
JLabel jlbola;//este JLabel sera la imagen que moveremos con el ratón
JLabel jlimagen1;//este JLabel sera la imagen que moveremos con el teclado
JLabel jlimagen2;//este JLabel sera la imagen de fondo
JTextField jttiempo;//aqui mostraremos el tiempo transcurrido
ahora cambiamos la vista de diseñador a código y dentro de la clase colocamos lo siguiente:
Sonido miHilo; Thread miThread; boolean band; HiloTiempo otrohilo=new HiloTiempo();
clase interna
private class HiloTiempo extends Thread { @Override public void run() { int contador = 0,min=0; while (true) { jttiempo.setText("0"+ min+":"+ contador); try { Thread.sleep(1000); } catch (InterruptedException ex) { Logger.getLogger(Animacion.class.getName()).log(Level.SEVERE, null, ex); } contador++; if(contador==60){ contador=0; min++; } } } }
dentro de nuestro constructor colocamos esto:
miHilo=new Sonido(); miThread = new Thread(miHilo); miThread.start(); otrohilo.start();
al botón jbmover le colocamos 2 eventos:
1- KeyPressed.
2- ActionPerformed.
debería quedar algo así:
private void jbmoverKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jbmoverKeyPressed if(band==true){ moverImagen(evt); } }//GEN-LAST:event_jbmoverKeyPressed private void jbmoverActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jbmoverActionPerformed band=true; }//GEN-LAST:event_jbmoverActionPerformed
al JLabel jlbola le colocaremos el evento: MouseDragged.
debería quedar algo así:
private void jlbolaMouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jlbolaMouseDragged if(band==true){ moverImagen2(evt); } }//GEN-LAST:event_jlbolaMouseDragged
también declararemos el método para mover la imagen con el ratón:
public void moverImagen2(java.awt.event.MouseEvent evento) { jlbola.setLocation(jlbola.getX() + evento.getX() - jlbola.getWidth()/2 , jlbola.getY() + evento.getY() - jlbola.getHeight()/2); }
estos son los los métodos para mover la imagen con el teclado:
private void moverImagen(java.awt.event.KeyEvent evt) { switch (evt.getKeyCode()) { case KeyEvent.VK_UP: moverArriba(); break; case KeyEvent.VK_DOWN: moverAbajo(); break; case KeyEvent.VK_LEFT: moverIzq(); break; case KeyEvent.VK_RIGHT: moverDer(); break; default: System.out.println("No valida"); } } private void moverArriba() { jlimagen1.setLocation(jlimagen1.getX(), jlimagen1.getY() - 10); } private void moverAbajo() { jlimagen1.setLocation(jlimagen1.getX(), jlimagen1.getY() + 10); } private void moverIzq() { jlimagen1.setLocation(jlimagen1.getX() - 10, jlimagen1.getY()); } private void moverDer() { jlimagen1.setLocation(jlimagen1.getX() + 10, jlimagen1.getY()); }
ahora crearemos otra clase para el sonido
import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import javax.sound.midi.InvalidMidiDataException; import org.jfugue.Player; public class Sonido implements Runnable { public void run() { Player player = new Player(); File midi=new File("lilium_intro.mid"); while (true) { try { player.playMidiDirectly(midi); } catch (IOException ex) { Logger.getLogger(Sonido.class.getName()).log(Level.SEVERE, null, ex); } catch (InvalidMidiDataException ex) { Logger.getLogger(Sonido.class.getName()).log(Level.SEVERE, null, ex); } } } }
descarga el proyecto desde aquí.
descarga la librería jfugue desde aquí o visita su pagina oficial.