Hum… poste a implementação da classe novoSemaforo2.
(Dica: não comece nomes de classes por minúsculas; isso confunde a quem vai ler seu código. Inicie nomes de classes por maiúsculas e nomes de métodos por minúsculas).
[quote=thingol]Hum… poste a implementação da classe novoSemaforo2.
(Dica: não comece nomes de classes por minúsculas; isso confunde a quem vai ler seu código. Inicie nomes de classes por maiúsculas e nomes de métodos por minúsculas).[/quote]
Obrigada pela dica…
[code]class novoSemaforo2 extends Thread
{
private JPanel canvas;
private int cor;
private int y;
private static final int tamanhoBola = 30;
private int status;
public novoSemaforo2(JPanel canvas)
{
this.canvas = canvas;
}
public void run()
{
poste();
//for infinito
for (;;)
{
while(getStatus()==1)
{
for (int i=1; i<=3; i++)
{
if (i==1)
{
//vermelho
setCor(1);
//moveCores posição y
moveCores(55);
}
else if (i==2)
{
//verde
setCor(2);
moveCores(85);
}
else if (i==3)
{
//laramja
setCor(3);
moveCores(115);
}
cores();
try
{
Thread.sleep(999);
}
catch (InterruptedException ie) {}
limparCor();
}
}
} // run()
}
public void moveCores(int posicao)
{
y = posicao;
} // move
public void poste()
{
Graphics p = canvas.getGraphics();
p.fill3DRect(100, 50, 40, 100, false);
p.draw3DRect(100, 50, 40, 100, false);
}
public void cores()
{
Graphics g = canvas.getGraphics();
if (getCor()==1)
{
g.setColor(Color.red);
}
else if (getCor()==2)
{
g.setColor(Color.GREEN);
}
else if (getCor()==3)
{
g.setColor(Color.orange);
}
g.fillOval(105, y, tamanhoBola, tamanhoBola);
}
public void limparCor()
{
Graphics g = canvas.getGraphics();
g.setColor(Color.BLACK);
g.fillOval(105, y, tamanhoBola, tamanhoBola);
}
public void pararSemaforo(int status)
{
setStatus(status);
}
/**
* @return the cor
*/
public int getCor() {
return cor;
}
/**
* @param cor the cor to set
*/
public void setCor(int cor) {
this.cor = cor;
}
/**
* @return the status
*/
public int getStatus() {
return status;
}
/**
* @param status the status to set
*/
public void setStatus(int status) {
this.status = status;
}
Hum… não é a thread que tem de desenhar alguma coisa. Do jeito que você fez, a máquina deve estar ocupando 100% de CPU (ou 50% em uma máquina com 2 núcleos ) e então não tem tempo de atender aos eventos de botões.
Você tem de criar um componente (derivado de JComponent, talvez), inseri-lo na sua tela, e redefinir seu método paintComponent.
Quando você precisa mexer no desenho, altere apenas as variáveis que são necessárias para efetuar o desenho, e então chame o método repaint desse componente.
[quote=thingol]Hum… não é a thread que tem de desenhar alguma coisa. Do jeito que você fez, a máquina deve estar ocupando 100% de CPU (ou 50% em uma máquina com 2 núcleos ) e então não tem tempo de atender aos eventos de botões.
Você tem de criar um componente (derivado de JComponent, talvez), inseri-lo na sua tela, e redefinir seu método paintComponent.
Quando você precisa mexer no desenho, altere apenas as variáveis que são necessárias para efetuar o desenho, e então chame o método repaint desse componente.
[/quote]