Foro de elhacker.net

Programación => Java => Mensaje iniciado por: 1mpuls0 en 6 Octubre 2009, 03:34 am



Título: Cómo animar JLabel?¿
Publicado por: 1mpuls0 en 6 Octubre 2009, 03:34 am
Hola, les platico mi problema. De un JTextField extraigo el String y este a su vez lo alamaceno en un JLabel para posteriormente "animarlo" usando Thread, pero no me funciona. Solo quiero saber si por lo menos estoy usando el metodo correcto, por ahora no tengo mi código a la mano, pero espero subirlo para explicarme mejor, pero si alguien puede orientarme se lo agradeceré.

Saludos.

PD. Al decir animarlo me refiero a que tengo su posicion xi, yi, xf, yf. Y utilizo el metodo setBounds(xi, yi, xf, yf);, quiero mover mi JLabel (TEXTO) hasta la posicion yf.



Título: Re: Cómo animar JLabel?¿
Publicado por: 1mpuls0 en 7 Octubre 2009, 03:48 am
Bien este es el código que tengo, si alguien puede ayudarme o por lo menos alguna sugerencia para hacer lo que quier (Animar un text)

Gracias


Código:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class animacionTexto extends JFrame{

private JButton botAnimar;
    private JPanel panel;
    private JLabel etiqueta;
    private int xI = 10;
    private int yI = 50;
    private int xF = 120;
    private int yF = 50;
    private hilo h;
    
    public static void main(String args[]) {
        new animacionTexto().setVisible(true);
    }

    public animacionTexto() {
        initComponents();
    }

    private void initComponents() {

        panel = new JPanel();
        botAnimar = new JButton();
        etiqueta = new JLabel();

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new FlowLayout());

        panel.setPreferredSize(new Dimension(500, 100));
        panel.setLayout(null);

        botAnimar.setText("Animar");
        botAnimar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                animar();
            }
        });
        panel.add(botAnimar);
        botAnimar.setBounds(10, 10, 100, 30);
        
        etiqueta.setText("Hilo");
        etiqueta.setForeground(Color.blue);
        panel.add(etiqueta);
        etiqueta.setBounds(xI, yI, 50, 25);
        

        getContentPane().add(panel);

        pack();
    }

private void animar() {
try{
h = new hilo(100);
h.start();
}catch(Exception e){
h.stop();
}
}

public void moverX(int x){
if((xI+x)<=xF){
etiqueta.setBounds((xI+x),yI,50,25);
}
}

}

class hilo extends Thread {
 
private int dist=0;
private int mseg;
private animacionTexto aT;
 
public hilo(int mseg)
{
dist = 0;
mseg = mseg;
}
 
        public void run()
{
try{
         for(int y=0; y<17; y++){
        sleep(mseg);
        aT.moverX(dist+=25);
         }
            }catch(InterruptedException e){
 
            }
}
 
}




Título: Re: Cómo animar JLabel?¿
Publicado por: Amerikano|Cls en 7 Octubre 2009, 04:12 am
Hola, primeramente deberias ordenar mucho mas tu code por que hay cosas que se hacen dificiles de entender, ademas estas poniendo atributos en la parte de abajo de la clase y eso incomoda en la lectura de el code.

Bueno, con respecto al code veo que la clase hilo en el metodo run() hace referencia a la ventana animacionTexto , lo cual veo que en ningun momento se la enviases, me explico la clase de la ventana en tu caso esta creando el hilo pero tu estas moviendo algo que no existe todavia alli dentro en la clase hilo para ello cuando vayas a crear el hilo enviale la referencia de la ventana y asi si la podras usar dentro de la clase hilo ejemplo:

Código
  1. private void animar() {
  2. try{
  3. h = new hilo(100, this);
  4. h.start();
  5. }catch(Exception e){
  6. h.stop();
  7.        }
  8. }

Y en en la clase hilo agregas esto:

Código
  1. class hilo extends Thread {
  2.  
  3. private int dist=0;
  4. private int mseg;
  5. private animacionTexto aT;
  6.  
  7. public hilo(int mseg, animacionTexto aT)
  8. {
  9. dist = 0;
  10. mseg = mseg;
  11.                this.aT=aT;
  12. }
  13.  
  14.        public void run()
  15. {
  16. try{
  17.         for(int y=0; y<17; y++){
  18.        sleep(mseg);
  19.        aT.moverX(dist+=25);
  20.         }
  21.            }catch(InterruptedException e){
  22.  
  23.            }
  24. }
  25.  
  26. }
  27.  

Otra cosa mas ... en la calse animacionTexto tienes un metodo void hilo(int mseg) que no lo estas usando para nada.

Tambien pon los errores que te salen al compilar.

Saludos y cualquier duda comenta ;)


Título: Re: Cómo animar JLabel?¿
Publicado por: 1mpuls0 en 7 Octubre 2009, 16:45 pm
Hola, si perdón por el desorden del código, andaba un poco de prisa se me olvido borrar algunos metodos y variables como las qe mencionas y algunos metodos los use como alternativa de la clase hilo, voy a intentar como me lo sugieres, a ver que tal

Gracias

Saludos


Título: Re: Cómo animar JLabel?¿
Publicado por: 1mpuls0 en 8 Octubre 2009, 03:36 am
Hola nuevamente, he seguido lo que me has dicho AmeRiK@nO, pero me produce el mismo resultado con el metodo alternativo, el cual lo que hacia era "como" si solo cambiara la etiqueta de lugar pero sin mostrar animacion, es decir como si solo hiciera:

Código:
etiqueta.setBounds(xI, yI, 50, 25);

y lo cambiara por

Código:
etiqueta.setBounds(x,F yF, 50, 25);

Repito sin mostrar ninguna "animacion".

Me puedes aconsejar hacer algo para intentar, o algun metodo ya existente en Java que me pueda ayudar  :rolleyes: o alguna otra alternativa.


Saludos y gracias por la respuesta