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.

