domingo, 20 de dezembro de 2009

[java-br] Problemas com ActionListener

·

 

Pessoal, bom dia.

Tenho o seguinte código (logo abaixo). O que eu pretendia fazer era um botão que ativasse a movimentação da bola e para cada 5 pixels movimentados ela mudasse para um gradiente diferente (os dois fors sao para a bola ir e voltar na diagonal).

O que acontece é que se o código da mudança de cor e movimentação estiver fora da classe listener do botão (ou seja, independente dele) a movimentação ocorre e o gradiente também vai atualizando. Do jeito que está agora, eu clico no botão e depois do tempo que ele deveria levar para toda a ação, eu só percebo a troca de gradiente (e apenas uma vez).

O mais estranho é que o x e o y são atualizados antes do frame.repaint().

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class BallAnimation {
JFrame frame;
JLabel label;
int x,y;

public static void main (String[] args) {
BallAnimation gui = new BallAnimation();
gui.go();
}

public void go() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

MyDrawPanel ball = new MyDrawPanel();

JButton button = new JButton("Change Color");
button.addActionListener(new ColorListener());

frame.getContentPane().add(BorderLayout.SOUTH, button);
frame.getContentPane().add(BorderLayout.CENTER, ball);
frame.setSize(300,300);
frame.setVisible(true);
}

// Time for the Inner Classes
class MyDrawPanel extends JPanel {
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;

int red = (int) (Math.random() * 256);
int green = (int) (Math.random() * 256);
int blue = (int) (Math.random() * 256);
Color colorStart = new Color(red, green, blue);

red = (int) (Math.random() * 256);
green = (int) (Math.random() * 256);
blue = (int) (Math.random() * 256);
Color colorFinish = new Color(red, green, blue);

GradientPaint gradient = new GradientPaint(x,y,colorStart,(x+80),(y+80),colorFinish);
g2d.setPaint(gradient);
g2d..fillOval(x,y,100,100);
}
}

class ColorListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
for (int j=0;j<10;j++) {
x+=5;
y+=5;
frame.repaint();
try {
Thread.sleep(50);
} catch (Exception ex) {}
}

for (int k=0;k<10;k++) {
x-=5;
y-=5;
frame.repaint();
try {
Thread.sleep(50);
} catch (Exception ex) {}
}
}
}
}

__________________________________________________________
Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com

[As partes desta mensagem que não continham texto foram removidas]

__._,_.___
Para sair da lista, envie email para: java-br-unsubscribe@yahoogroups.com
Para upload/download de arquivos: http://www.yahoogroups.com/files/java-br
.

__,_._,___

0 comentários:

Pague com LPs do Mister Colibri

Pague com LPs do Mister Colibri
Quer comprar celular,Tablet,pen drive, GPS e muito outros produtos e ainda podendo pagar tudo em LPs ?Pois saiba que isso é possível,basta você visitar o site downloadstotal.com e realizar a sua compra com toda tranquilidade e segurança!!!

Hora

Online

Arquivo do Blog