Ayuda Java mostrar Secuencia de Imagenes en JPanel al presionar un boton

Iniciado por Nsc-Hack, 15 Junio 2013, 10:08 AM

0 Miembros y 1 Visitante están viendo este tema.

Nsc-Hack

Hola intento simular la rotacion de un motor tengo 36 imagenes que van de 10 en 10 grados  que al pasar una tras otra dan efecto de rotacion.... necesito que al precionar el boton automatico me simule dicha rotacion  con eso ya me guio en la parte manual que pide grados de rotacion y revoluciones por minuto

SOlO


este es el codigo que tengo, si me pudieran ayudar diciend donde me equivoco y como podria implementarlo

Código (java) [Seleccionar]


import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferStrategy;
import java.io.IOException;
import java.io.InputStream;
import java.security.Principal;
import javax.imageio.ImageIO;



public class Motor extends JFrame implements Runnable{
   
   

   Image[] img;
   Image fondo;
   InputStream imgStream;
   Timer timer1;
   private BufferStrategy estrategia;
   int numeroImagen=0;

   
   public Motor() {
       
       super("STEPPER MOTOR SIMULATOR");
       JDesktopPane principal = new JDesktopPane();
       
       // declaracion de variables del GUI
       
       JLabel modo = new JLabel("MODO");
       JLabel labelAutomatico = new JLabel("AUTOMATICO");
       JButton botonAutomatico = new JButton("RUN");
       JButton botonStop= new JButton("STOP");
       JLabel labelManual = new JLabel("MANUAL:");
       JLabel labelRPM = new JLabel("RPM");
       JLabel direccion = new JLabel("DIRECCION");
       final JTextField rpm = new JTextField();
       JLabel labelGrados = new JLabel("GRADOS");
       DefaultComboBoxModel dirModelo = new DefaultComboBoxModel(new String[]{"LEFT" ,"RIGTH"});
       final JComboBox dir = new JComboBox(dirModelo);
       final JTextField grados = new JTextField();
       JButton run = new JButton("RUN");
       JPanel simulador = new JPanel();
       
   
       
       // Agregando a nuestro Desktop
       principal.setBackground(new Color(180,180,180));
       principal.add(modo);
       principal.add(labelAutomatico);
       principal.add(botonAutomatico);
       principal.add(botonStop);
       principal.add(labelManual);
       principal.add(labelRPM);
       principal.add(direccion);
       principal.add(rpm);
       principal.add(labelGrados);
       principal.add(grados);
       principal.add(dir);
       principal.add(run);
       principal.add(simulador);
       
       // Dando Ubicacion
       modo.setBounds(120, 30, 40, 30);
       labelAutomatico.setBounds(20, 100, 1000, 20);
       botonAutomatico.setBounds(120,100, 70, 20);
       botonStop.setBounds(200, 100, 70, 20);
       labelManual.setBounds(20, 160, 80, 20);
       labelRPM.setBounds(50, 190, 30, 20);
       labelGrados.setBounds(150, 190, 50, 20);
       direccion.setBounds(250, 190, 100, 20);
       rpm.setBounds(50, 230, 50, 20);
       grados.setBounds(150, 230, 50, 20);
       dir.setBounds(250, 230, 60, 20);
       run.setBounds(120, 290, 120, 20);
       simulador.setBounds(380, 30, 228, 231);
       
       
       // Frame
       
       
       
       this.add(principal, BorderLayout.CENTER);
       this.setResizable(false);
       this.setSize(650, 390);
       this.setLocationRelativeTo(null);
       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       this.setVisible(true);
       
       
       /*
       
       botonAutomatico.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
       cargaImagen();
       repaint();
       run();      
           }
       });
       //***********************
        botonStop.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
                   
             
           }
       });
       
       */
       
   }// fin del constructor
   
   
   public static void main(String[] args){
       // se crea un objeto para inicializar
       Motor obj = new Motor();
       
   }// fin del main
   
   public void cargaImagen() {

       img = new Image[36];
       try {
           imgStream = Principal.class.getResourceAsStream("Imagenes/0.jpg");
           fondo = ImageIO.read(imgStream);
           for (int i = 0; i < 36; i++) {
               imgStream = Principal.class.getResourceAsStream("Imagenes/"+i+".jpg");
               img[i] = ImageIO.read(imgStream);

           }

       } catch (IOException e) {
           e.printStackTrace();
       }
   }
   
   
 
       public void run() {
           
       
         if(numeroImagen <= 35) {
               numeroImagen++;
           }
         else {
               numeroImagen = 0;
           }
         
         
   }
   
   
   public void paint(Graphics g) {
       Graphics g3 = (Graphics2D) estrategia.getDrawGraphics();
       g3.drawImage(img[numeroImagen], 380, 30, 228, 231, null);
       estrategia.show();
       repaint();
     
   }

 
 
   
   
   
}



estos son los errores que me muestra:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
   at Motor.paint(Motor.java:180)
   at javax.swing.RepaintManager$3.run(RepaintManager.java:825)
   at javax.swing.RepaintManager$3.run(RepaintManager.java:802)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
   at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:802)
   at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:745)
   at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:725)
   at javax.swing.RepaintManager.access$1000(RepaintManager.java:46)
   at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1668)
   at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
   at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:672)
   at java.awt.EventQueue.access$400(EventQueue.java:81)
   at java.awt.EventQueue$2.run(EventQueue.java:633)
   at java.awt.EventQueue$2.run(EventQueue.java:631)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
   at java.awt.EventQueue.dispatchEvent(EventQueue.java:642)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
   at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
   at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
   at Motor.paint(Motor.java:182)
   at javax.swing.RepaintManager$3.run(RepaintManager.java:825)
   at javax.swing.RepaintManager$3.run(RepaintManager.java:802)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
   at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:802)
   at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:745)
   at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:725)
   at javax.swing.RepaintManager.access$1000(RepaintManager.java:46)
   at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1668)
   at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
   at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:672)
   at java.awt.EventQueue.access$400(EventQueue.java:81)
   at java.awt.EventQueue$2.run(EventQueue.java:633)
   at java.awt.EventQueue$2.run(EventQueue.java:631)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
   at java.awt.EventQueue.dispatchEvent(EventQueue.java:642)
   at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
   at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
   at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)


anexo una imagen de lo que quiero hacer...

Gracias de antemano



necesito mostrar en ese JPanel las imagenes una tras otra cuando presione el boton RUN. les agradezco su ayuda....  solo con un pequeño consejo yo ya resuelvo lo demas


Pd: volvi a hacer el codigo de ceros (sin usar el editor de netbeans, para que quedara mas entendible el codigo )

Nsc-Hack

Creo que no estoy utilizando bn Los Threads o la parte de mostrar las imagenes....

Pd: volvi a hacer el codigo de ceros (sin usar el editor de netbeans, para que quedara mas entendible el codigo )

~ Yoya ~

sube todas las img en un archivo comprimido a Dropbox, Box, o Drive. Y pasa el link para descargarlo, para poder testear.

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Nsc-Hack

Hola gracias por contestar....

las subi a 4shared

http://www.4shared.com/rar/AiAE_tgj/Imagenes.html

y  gracias


~ Yoya ~


Código (java,2) [Seleccionar]
    public void paint(Graphics g) {
        Graphics g3 = (Graphics2D) estrategia.getDrawGraphics();
        g3.drawImage(img[numeroImagen], 380, 30, 228, 231, null);
        estrategia.show();
        repaint();
       
    }


En la linea marcada, el la propiedad estrategia no esta definido en ningún lado y como es un objeto obtiene un valor null por defecto. g3 no esta apuntando a ningun objeto por lo tanto (tiene un valor nulo), al intentar invocar los metodos de g3 te lanza la excepción java.lang.NullPointerException

Ese método tiene un parámetro que en ningún momento utilizas...



Código (java,5,8) [Seleccionar]
public void cargaImagen() {

        img = new Image[36];
        try {
            imgStream = Principal.class.getResourceAsStream("Imagenes/0.jpg");
            fondo = ImageIO.read(imgStream);
            for (int i = 0; i < 36; i++) {
                imgStream = Principal.class.getResourceAsStream("Imagenes/"+i+".jpg");
                img[i] = ImageIO.read(imgStream);


Principal.class.... La única clase del proyecto se llama Motor y en esa linea estas llamando a la clase Principal que no existe. También en la ruta de la imagen, la extensión jpg va en mayuscula, ya que en la extensión de las imagenes la tienes en mayuscula.



También hay muchísimas cositas malas. Ese código lo haz tomado de alguien y lo haz modificado, o algo similar, espero equivocarme.

Te recomiendo que intentes hacerlo tu mismo, si sabes utilizar Thread y sabes lo que estas haciendo en cada linea entonce lo harás sin ningún problema.

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Nsc-Hack

mmm ya ... :D  que tonto...

gracias

el codigo si lo hice yo... solo que la parte de mostrar imagenes me base en un sprite que tenia... y  tome parte de ese código....


ya lo demás creo que no voy a tener problema....  y muchas gracias... y ps lo hice en muy poco tiempo...


lo de Hilos si lo manejos mas o meno (±), pero bueno voy a terminar eso muchas gracias...