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.
Hola Alexander espero que estés muy bien, agradezco de antemano este ejemplo que me és muy útil, quisiera perdirte un favor lo que pasa es que necesito una idea de como podría hacer el movimiento del gato en tu ejemplo, pero que el gato se quede estático, y genera una réplica que es la que se va mover, te agradecería inmensamente si pudieras hacer esa modificación a tu ejemplo y me lo enviaras, Mi correo es daltemen@gmail.com Agradezco cualquier tipo de respuesta. Buen día.
ResponderEliminar