CORRIDA DE CARROS COM THREADS EM JAVA
A postagem a seguir é um exemplo de corridas de carros criada com fazendo o uso de Threads e Swing em Java.O exemplo seguir foi criado utilizando o Eclipse IDE. As Threads são um fluxo de execução de uma determinada tarefa em um programa, várias threads podem ser executadas em concorrência pelo processador, concorrência essa será aplicada aos carros de nossa corrida.
O primeiro passo é separar nossa aplicação em pacotes. Crie os pacotes a seguir control, view e crie o folder imagens para guardar as imagens de sua corrida.
Após dividir nossa aplicação java em pacotes crie as seguintes classes em seus respectivos pacotes:
Após copie os arquivos de images para a folder imagens do seu projeto.
Clique em Mais Informações para Visualizar o Código do Projeto.
Programando as classes do domínio:
A estratégia de implementação da Thread foi implementar a interface Runnable, já que teremos que extender a classe JFrame para construir nosso formulário em Java Swing.
Classe CarroThread:
package control;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class CarroThread extends JLabel implements Runnable {
private Thread carroThread = null;
private int posX;
private int posY;
private ImageIcon imagem;
// CONSTRUTOR DEFAULT
public CarroThread() {
}
// CONSTRUTOR SOBRECARREGADO
public CarroThread(String nome, ImageIcon img, int posX, int posY){
super(img);
this.imagem = img;
this.posX = posX;
this.posY = posY;
carroThread = new Thread(this, nome);
carroThread.start();
}
// MÉTODO RUN() DA INTERFACE RUNNABLE
@Override
public void run() {
posX += new Random().nextInt(3) * 10;
this.setLocation(posX, posY);
if (posX >= 1280)
return;
try {
Thread.sleep(new Random().nextInt(5) * 100);
run();
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class CarroThread extends JLabel implements Runnable {
private Thread carroThread = null;
private int posX;
private int posY;
private ImageIcon imagem;
// CONSTRUTOR DEFAULT
public CarroThread() {
}
// CONSTRUTOR SOBRECARREGADO
public CarroThread(String nome, ImageIcon img, int posX, int posY){
super(img);
this.imagem = img;
this.posX = posX;
this.posY = posY;
carroThread = new Thread(this, nome);
carroThread.start();
}
// MÉTODO RUN() DA INTERFACE RUNNABLE
@Override
public void run() {
posX += new Random().nextInt(3) * 10;
this.setLocation(posX, posY);
if (posX >= 1280)
return;
try {
Thread.sleep(new Random().nextInt(5) * 100);
run();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Classe Programa:
package view;
import view.Janela;
public class Programa {
public static void main(String[] args) {
new Janela();
}
}
import view.Janela;
public class Programa {
public static void main(String[] args) {
new Janela();
}
}
Classe Janela:
package view;
import java.awt.Color;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import control.CarroThread;
@SuppressWarnings("serial")
public class Janela extends JFrame implements ActionListener {
private JButton btnCorrida;
private JButton btnCancel;
private JLabel lblPista;
private JLabel lblVelocimetro;
private ImageIcon imgCarro1;
private ImageIcon imgCarro2;
private ImageIcon imgCarro3;
private ImageIcon pista;
private ImageIcon velocimetro;
public Janela() {
super();
import java.awt.Color;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import control.CarroThread;
@SuppressWarnings("serial")
public class Janela extends JFrame implements ActionListener {
private JButton btnCorrida;
private JButton btnCancel;
private JLabel lblPista;
private JLabel lblVelocimetro;
private ImageIcon imgCarro1;
private ImageIcon imgCarro2;
private ImageIcon imgCarro3;
private ImageIcon pista;
private ImageIcon velocimetro;
public Janela() {
super();
// ADICIONANDO ELEMENTOS AO FORMULÁRIO
this.setLayout(null);
this.setSize(1280, 650);
this.setLocation(50, 50);
this.setResizable(false);
getContentPane().setBackground(Color.white);
this.setTitle("Rally Magé Extreme 2012");
velocimetro = new ImageIcon("./src/imagens/velocimetro.gif");
pista = new ImageIcon("./src/imagens/pista.png");
this.lblPista = new JLabel(pista);
this.lblVelocimetro = new JLabel(velocimetro);
// POSICIONANDO OS ELEMENTOS DO FORM
this.lblVelocimetro.setBounds(200, 490, 150, 150);
this.lblPista.setBounds(0, 0, 1280, 650);
this.add(lblPista);
this.lblPista.add(lblVelocimetro);
this.lblPista.setBackground(Color.BLACK);
this.btnCorrida = new JButton("Start Rally");
this.btnCancel = new JButton("Stop Rally");
// POSIONADO OS BOTÕES
this.btnCorrida.setBounds(500, 550, 120, 50);
this.btnCancel.setBounds(640, 550, 120, 50);
// INSERINDO AS IMAGENS DOS CARROS
imgCarro1 = new ImageIcon("./src/imagens/carro1.png");
imgCarro2 = new ImageIcon("./src/imagens/carro2.png");
imgCarro3 = new ImageIcon("./src/imagens/carro3.png");
this.lblPista.add(btnCorrida);
this.lblPista.add(btnCancel);
this.setVisible(true);
btnCorrida.addActionListener(this);
btnCancel.addActionListener(this);
JPanel jPanel = new JPanel();
jPanel.setSize(300, 70);
jPanel.setLayout(null);
jPanel.setLocation(970, 510);
jPanel.setBorder(BorderFactory.createTitledBorder("[Grupo de Trabalho]"));
jPanel.setVisible(true);
this.repaint();
}
// INSERINDO AS JLABELS DOS CARROS
public JLabel JLabelCarros(String nome, ImageIcon img, int posX, int posY) {
CarroThread carro = new CarroThread(nome, img, posX, posY);
carro.setSize(256, 141);
carro.setVisible(true);
this.add(carro);
return carro;
}
this.setLayout(null);
this.setSize(1280, 650);
this.setLocation(50, 50);
this.setResizable(false);
getContentPane().setBackground(Color.white);
this.setTitle("Rally Magé Extreme 2012");
velocimetro = new ImageIcon("./src/imagens/velocimetro.gif");
pista = new ImageIcon("./src/imagens/pista.png");
this.lblPista = new JLabel(pista);
this.lblVelocimetro = new JLabel(velocimetro);
// POSICIONANDO OS ELEMENTOS DO FORM
this.lblVelocimetro.setBounds(200, 490, 150, 150);
this.lblPista.setBounds(0, 0, 1280, 650);
this.add(lblPista);
this.lblPista.add(lblVelocimetro);
this.lblPista.setBackground(Color.BLACK);
this.btnCorrida = new JButton("Start Rally");
this.btnCancel = new JButton("Stop Rally");
// POSIONADO OS BOTÕES
this.btnCorrida.setBounds(500, 550, 120, 50);
this.btnCancel.setBounds(640, 550, 120, 50);
// INSERINDO AS IMAGENS DOS CARROS
imgCarro1 = new ImageIcon("./src/imagens/carro1.png");
imgCarro2 = new ImageIcon("./src/imagens/carro2.png");
imgCarro3 = new ImageIcon("./src/imagens/carro3.png");
this.lblPista.add(btnCorrida);
this.lblPista.add(btnCancel);
this.setVisible(true);
btnCorrida.addActionListener(this);
btnCancel.addActionListener(this);
JPanel jPanel = new JPanel();
jPanel.setSize(300, 70);
jPanel.setLayout(null);
jPanel.setLocation(970, 510);
jPanel.setBorder(BorderFactory.createTitledBorder("[Grupo de Trabalho]"));
jPanel.setVisible(true);
this.repaint();
}
// INSERINDO AS JLABELS DOS CARROS
public JLabel JLabelCarros(String nome, ImageIcon img, int posX, int posY) {
CarroThread carro = new CarroThread(nome, img, posX, posY);
carro.setSize(256, 141);
carro.setVisible(true);
this.add(carro);
return carro;
}
// PROGRAMANDO A AÇÃO DOS BOTÕES
@Override
public void actionPerformed(ActionEvent dispara) {
if (dispara.getSource() == this.btnCorrida) {
this.lblPista.add(JLabelCarros("Carro1", imgCarro1, 0, 50));
this.lblPista.add(JLabelCarros("Carro1", imgCarro2, 0, 200));
this.lblPista.add(JLabelCarros("Carro1", imgCarro3, 0, 350));
}
if (dispara.getSource() == this.btnCancel) {
System.exit(0);
}
}
}
@Override
public void actionPerformed(ActionEvent dispara) {
if (dispara.getSource() == this.btnCorrida) {
this.lblPista.add(JLabelCarros("Carro1", imgCarro1, 0, 50));
this.lblPista.add(JLabelCarros("Carro1", imgCarro2, 0, 200));
this.lblPista.add(JLabelCarros("Carro1", imgCarro3, 0, 350));
}
if (dispara.getSource() == this.btnCancel) {
System.exit(0);
}
}
}
RESULTADO:

(Trabalho de Tópicos de Programação da Unigranrio)
Java Java Java Java Java Java Java Java Java Java Java Java Java Java Java Java Java Java Java Java Java Java Java Java Java Java Java :D
ResponderExcluirshowwww manin!!! me ajudou pra carai...!!!
ResponderExcluirBom ter ajudado, confira mais Java, WebServices, PHP no novo endereço: www.webcodefree.com.br
ExcluirPoxa amigo não consegui chamar as imagens...
ResponderExcluir