[quote=dyeimys][color=red][size=18]Se alguem achar que estou falando Besteria me corrija [/size] [/color]
david.jv, estou com uma dica de Código aqui para seu Problema:
É algo bem simples talvez exista uma solução melhor para este problema, mais vai ai:
[color=darkred]Classe Sorteio com uma variavel Global int num [/color]
public class Sorteio extends JLabel implements Runnable {
int num;
}
[color=darkred]No construtor vamos trabalhar com o texto da Label, as Threads e ação do Mouse[/color]
1 - Setando a configuração de Fonte do Label
2 - Instanciando um objeto do tipo Thread, com parametro [color=blue]this[/color], pois iremos implementar o método [color=blue]run[/color].
3 - Acionando uma parada da Thread ao Clicar com o Mouse.
[code]public Sorteio() {
setFont(new Font("", Font.BOLD, 100));
final Thread th = new Thread(this);
addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
th.stop();
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
});
th.start();
}[/code]
[color=darkred] Vamos para a implementação do método [color=blue]run[/color] [/color].
1 - Temos que colocar um laço infinito nele para ele executar infinitamente (obvio)
2 - Colocar um tempo de parada para ele executar novamente (Este tempo é dado em Milisegundos.
3 - Devemos também tratar a exceção,
4 - Pode se ver que tem um método dentro chamado sorteio ele terá o papel de setar a variável [color=blue]num [/color],
public void run() {
for (;;) {
try {
sorteia();
Thread.sleep(30);
} catch (InterruptedException ex) {
}
}
}
[color=darkred]Por fim fazer o metodo sorteio [/color]
Método que seta a label, e será executado dentro da run
[code]public void sorteia() {
if (num < 101) {
num++;
}
if (num == 101) {
num = 0;
}
setText(Integer.toString(num));
}[/code]
Agora so fazer um frame e estanciar um objeto do tipo Sorteio tentro, para que nao Haja duvida vou colocar aqui em baixo um teste
Testa ele no metodo main
public static void main(String[] args) {
JFrame janela = new JFrame();
janela.add(new Sorteio());
janela.setBounds(300,300,400, 200);
janela.setDefaultCloseOperation(3);
janela.setVisible(true);
}
}
david.jv- De uma estudada mais afundo, na parte de Thread, ajudaria muito você a entender estas coisas.[/quote]
dyeimys, muito legal o seu exemplo, deu certim para o meu problema.
Mas eu tentei fazer uma mudança nele e está dando erro. Segue o código abaixo:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package sorteanumero;
import java.awt.Font;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JLabel;
public class Sorteio extends JLabel implements Runnable {
int num;
int result = 1;
public Sorteio() {
setFont(new Font("", Font.BOLD, 100));
final Thread th = new Thread(this);
addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
if(result==1){ // Aqui eu coloquei essa condição
th.stop();
result +=1;
}else{
th.start();
result-=1;
}
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
});
th.start();
}
@Override
public void run() {
for (;;) {
try {
sorteia();
Thread.sleep(30);
} catch (InterruptedException ex) {
}
}
}
public void sorteia() {
if (num < 101) {
num++;
}
if (num == 101) {
num = 0;
}
setText(Integer.toString(num));
}
}
O que eu tentei mudar foi o seguinte. A primeira fez que a pessoa clicar ele para. se ela clicar de novo ele volta a sortear. Para isso
acrescentei uma condição, só que tá dando essa exceção:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:638)
at sorteatime2.Sorteio$1.mouseClicked(Sorteio.java:31)
at java.awt.Component.processMouseEvent(Component.java:6291)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6053)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
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)