Olá Cristian,
tudo bem?
Obrigado por compartilhar sua lógica. Cara, você já está bem mais avançado do que eu kkkk. Como ainda não “manjo” muito a parte das telas, vou focar na lógica, sobre esta ótica eu reproduzi sua aplicação e funcionou legal. Fiz algumas alterações e gostaria de compartilhá-las com você como sugestões. Bem, eu resumi a aplicação em 3 Classes. Foram elas:
o DAO (Data Access Object) é uma nomenclatura sugerida por um conceito de Design Pattern. De modo geral, nesta classe, devem estar toda a lógica (regra de negócio ) para interação / manipulação do seu objeto do tipo Veiculos. O nome desta classe é formado por: tipo + DAO resultando neste caso em: VeiculosDao.
Possui o método main() .
Criando a implementação
Ao criar as classes, tente sempre manter nelas apenas atributos e métodos que devem realmente ser dela. Evite colocar código de outras classes, ou implementar o método de outras classes, assim, o acoplamento entre elas se tornará fraco. Quanto mais genéricas forem suas classes melhor.
Classe Veiculos
Esta é a sua classe Veiculo (sem o “esse”). Repeti exatamente o que você havia feito
OBS: Como @Jonas_B_a_r_r_o_s havia comentado, você não precisa deste trecho de código:
public Veiculo() {
}
Simplesmente porque ele não esta fazendo nada. Este é o construtor padrão da classe. A classe completa ficou assim:
package veiculos;
public class Veiculos {
private String modelo;
private String cor;
private String placa;
public String getModelo() {
return modelo;
}
public void setModelo(String modelo) {
this.modelo = modelo;
}
public String getCor() {
return cor;
}
public void setCor(String cor) {
this.cor = cor;
}
public String getPlaca() {
return placa;
}
public void setPlaca(String placa) {
this.placa = placa;
}
}
Classe VeiculosDao
Esta é sua classe Veiculos. Fiz algumas alterações nela. Vamos lá:
Bem, como os dados do veículo diretamente no banco, mantive o atributo do tipo Array para depois consultarmos os dados nele.
Estou utilizando o polimorfismo neste caso. O atributo lista é do tipo List. Como a classe ArrayList implementa uma List (interface), posso armazenar meu array neste atributo. Também estou informando que o meu Array será do tipo Veiculos.
private List <Veiculos> lista = new ArrayList<>();
Este método, adiciona, está igual ao seu também.
public void adiciona(Veiculos veiculo) {
lista.add(veiculo);
}
Neste método, alterei o retorno dele para devolver um objeto do tipo Veiculos. Também retirei as chamadas da Classe JOptionPane de modo que a restringir a responsabilidade desta classe que é apenas encontrar um veículo a partir da placa. O atributo confere também foi descartado. A maneira como estou percorrendo a lista é conhecida como ForEach. De modo geral, informo o tipo de objeto contido no Array e a lista.
public Veiculos buscaPorPlaca(String placa){
for(Veiculos v : this.lista){
if(v.getPlaca().equals(placa))
return v;
}
return null;
}
O método mostraVeiculo, eu suponho, por causa dos parâmetros que recebe (int i) que você está executando ele dentro de um loop como o for. Fiz uma pequena modificação de modo que, ao chamar este método, ele me retorne a lista atual:
public List getLista(){
return this.lista;
}
Assim, a Classe VeiculosDao, não fica responsável por saber como funciona a implementação da interface. Ela apenas faz as interações (adicionar, remover, atualizar e buscar) devolvendo algum objeto, quando necessário.
Como havia comentado, ao invés de criar a interface em telas, implementei apenas um Classe para testes. Ela ficou assim:
package veiculos;
import java.util.List;
public class TestaVeiculo {
public static void main(String[] args) {
// Objeto será utilizado para invocar os metodos que manipulam a lista
VeiculosDao dao = new VeiculosDao();
// Instanciando objeto e setando valores
Veiculos v1 = new Veiculos();
v1.setCor("Vermelhor");
v1.setModelo("A3");
v1.setPlaca("ABC-123");
// adiciona veiculo novo
dao.adiciona(v1);
// Instanciando objeto e setando valores
Veiculos v2 = new Veiculos();
v2.setCor("Azul");
v2.setModelo("Gol");
v2.setPlaca("XPT-456");
// adiciona veiculo novo
dao.adiciona(v2);
// Instanciando objeto e setando valores
Veiculos v3 = new Veiculos();
v3.setCor("Amarelo");
v3.setModelo("Fox");
v3.setPlaca("WYZ-789");
// adiciona veiculo novo
dao.adiciona(v3);
//recupera a lista
List<Veiculos> listaComTodosOsVeiculos = dao.getLista();
//percorre a lista
//for (Veiculos lv : listaComTodosOsVeiculos)
// System.out.println(lv.getModelo());
//procura veiculo pela placa
Veiculos novo = dao.buscaPorPlaca(v2.getPlaca());
System.out.println(novo.getModelo());
}
}
Tente refatorar suas classes para este modelo, teste e se funcionar, evolua para a tela.
Espero ter ajudado / contribuído com algo =D