[RESOLVIDO] action Não captura ação do botão

24 respostas
victorrgds

fala galera, estou com o seguinte problema:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;



public class SearchVehicleView extends JFrame{
	
	private JLabel labelVeiculo;
	private JPanel painel;
	private JTextField textVeiculo;
	private JTable tabelaConsulta;
	//private String[] nomeColunas;
	//private String dadosTabela[][];
	private JButton botaoConsult;
	private JButton botaoAlugar;
	private JButton botaoReservar;

	
	public SearchVehicleView(){
		super("Consultar Veículo");
		setSize(540,400);
		setLocation(400,200);
		painel = new JPanel(new SpringLayout());
		SpringLayout layout = new SpringLayout();
     	painel.setLayout(layout);
		
		labelVeiculo = new JLabel("Digite o nome do Veículo: ");
		textVeiculo = new JTextField(15);
		botaoConsult = new JButton("Pesquisar Veículo");
		botaoAlugar = new JButton("Alugar Veículo");
		botaoReservar = new JButton("Reservar Veículo");
		
		//Tratador dos botoes
		TrataBotao tratador = new TrataBotao();
		
		//Instancia Tabela
		tabelaConsulta = new JTable();
		//Define um modelo para a tabela com o Título da coluna
		TableModel model = new DefaultTableModel(new String[] {"Veículo","Grupo","Acessorios","Placa"},0);
		//seta o modelo
		tabelaConsulta.setModel(model);
		//seta o nome??
		tabelaConsulta.setName("Resultado");
		//nao sei ainda
		JScrollPane resultado = new JScrollPane();
		//nao sei ainda
		resultado.setViewportView(tabelaConsulta);
		//define um tamanho fixo pra tabela
		tabelaConsulta.setPreferredScrollableViewportSize(new Dimension(490, 150));
		//nao sei	
		DefaultTableModel dtm = (DefaultTableModel) tabelaConsulta.getModel();
		//adiciona uma linha
		dtm.addRow(new Object[] {"Gol","C ? Econômico com Ar",new Boolean(true),new Boolean(false),new Boolean(false)});
		
		
		painel.add(labelVeiculo);
		painel.add(textVeiculo);
		painel.add(botaoConsult);
		painel.add(resultado);
		painel.add(botaoAlugar);
		painel.add(botaoReservar);
		
		
		
		//Configura a posição de cada item na tela - label Veiculo
		layout.putConstraint(SpringLayout.WEST, labelVeiculo,17,SpringLayout.WEST, painel);
		layout.putConstraint(SpringLayout.NORTH, labelVeiculo,20,SpringLayout.NORTH, painel);
		
		//text Veiculo
		layout.putConstraint(SpringLayout.WEST, textVeiculo,160,SpringLayout.WEST, labelVeiculo);
		layout.putConstraint(SpringLayout.NORTH, textVeiculo,20,SpringLayout.NORTH, painel);
		
		//botao Pesquisar
		layout.putConstraint(SpringLayout.WEST, botaoConsult,355,SpringLayout.WEST, labelVeiculo);
		layout.putConstraint(SpringLayout.NORTH, botaoConsult,18,SpringLayout.NORTH, painel);
		
		//tabela
		layout.putConstraint(SpringLayout.WEST, resultado,17,SpringLayout.WEST, painel);
		layout.putConstraint(SpringLayout.NORTH,resultado,80,SpringLayout.NORTH, painel);
		
		//botao alugar
		layout.putConstraint(SpringLayout.WEST, botaoAlugar,120,SpringLayout.WEST, painel);
		layout.putConstraint(SpringLayout.NORTH,botaoAlugar,300,SpringLayout.NORTH, painel);
		
		//botao Reservar
		layout.putConstraint(SpringLayout.WEST, botaoReservar,180,SpringLayout.WEST, botaoAlugar);
		layout.putConstraint(SpringLayout.NORTH,botaoReservar,300,SpringLayout.NORTH, painel);
		
		
		setResizable(false);
		painel.setOpaque(true);
		setContentPane(painel);
		setVisible(true);
		fechaJanela  fecha = new fechaJanela(); 
		
	      

	
	}
	
//--------------------Acoes----------------------
	private class TrataBotao implements ActionListener
	{
	
		public void actionPerformed(ActionEvent evento){
	
		//botao pesquisar
			if(evento.getSource()==botaoConsult){
				
					Veiculos veiculos = new Veiculos();
					List<Veiculos> retorno = veiculos.consultarVeiculos();
					DefaultTableModel dtm = (DefaultTableModel) tabelaConsulta.getModel();
					
					// antes de preencher, limpa todos os dados do JTable, remove linhas em branco da tabela
					while (tabelaConsulta.getRowCount() > 0) {
						dtm.removeRow(0);
					}
					
					for (Iterator<Veiculos> it = retorno.iterator(); it.hasNext();) {
						veiculos = it.next();
						// inclui uma linha no JTable com os dados de um
						// registro retornado
						//
						dtm.addRow(new Object[] { veiculos.getNome(), veiculos.getGrupo(), veiculos.getPlaca()});
					}
		 	}
	}
}
}

Nesta tela existe o botão pesquisar, que busca direto esses dados no BD mysql, porém depois de conectar e td mais, qnd clico no pesquisar ele não tem ação nenhuma, sendo que foi feito no finalzinho…alguem poderia me dizer onde estou errando?

Pq não aparece erro tbm quando clico no pesquisar para trazer os dados do banco…

abs

24 Respostas

lina

Oi,

Lá vai a primeira pergunta: A sua variável tratador está sendo utilizada em algum lugar?

Tchauzin!

victorrgds

opa, sim! é que mandei a classe desatualizada…

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;



public class SearchVehicleView extends JFrame{
	
	private JLabel labelVeiculo;
	private JPanel painel;
	private JTextField textVeiculo;
	private JTable tabelaConsulta;
	//private String[] nomeColunas;
	//private String dadosTabela[][];
	private JButton botaoConsult;
	private JButton botaoAlugar;
	private JButton botaoReservar;

	
	public SearchVehicleView(){
		super("Consultar Veículo");
		setSize(540,400);
		setLocation(400,200);
		painel = new JPanel(new SpringLayout());
		SpringLayout layout = new SpringLayout();
     	painel.setLayout(layout);
		
		labelVeiculo = new JLabel("Digite o nome do Veículo: ");
		textVeiculo = new JTextField(15);
		botaoConsult = new JButton("Pesquisar Veículo");
		botaoAlugar = new JButton("Alugar Veículo");
		botaoReservar = new JButton("Reservar Veículo");
		
		//Tratador dos botoes
		TrataBotao tratador = new TrataBotao();
		
		//Ação dos botões
		
		botaoConsult.addActionListener(tratador);
		botaoAlugar.addActionListener(tratador);

		
		//Instancia Tabela
		tabelaConsulta = new JTable();
		//Define um modelo para a tabela com o Título da coluna
		TableModel model = new DefaultTableModel(new String[] {"Veículo","Grupo","Acessorios","Placa"},0);
		//seta o modelo
		tabelaConsulta.setModel(model);
		//seta o nome??
		tabelaConsulta.setName("Resultado");
		//nao sei ainda
		JScrollPane resultado = new JScrollPane();
		//nao sei ainda
		resultado.setViewportView(tabelaConsulta);
		//define um tamanho fixo pra tabela
		tabelaConsulta.setPreferredScrollableViewportSize(new Dimension(490, 150));
		//nao sei	
		DefaultTableModel dtm = (DefaultTableModel) tabelaConsulta.getModel();
		//adiciona uma linha
		dtm.addRow(new Object[] {"Gol","C ? Econômico com Ar",new Boolean(true),new Boolean(false),new Boolean(false)});
		
		
		painel.add(labelVeiculo);
		painel.add(textVeiculo);
		painel.add(botaoConsult);
		painel.add(resultado);
		painel.add(botaoAlugar);
		painel.add(botaoReservar);
		
		
		
		//Configura a posição de cada item na tela - label Veiculo
		layout.putConstraint(SpringLayout.WEST, labelVeiculo,17,SpringLayout.WEST, painel);
		layout.putConstraint(SpringLayout.NORTH, labelVeiculo,20,SpringLayout.NORTH, painel);
		
		//text Veiculo
		layout.putConstraint(SpringLayout.WEST, textVeiculo,160,SpringLayout.WEST, labelVeiculo);
		layout.putConstraint(SpringLayout.NORTH, textVeiculo,20,SpringLayout.NORTH, painel);
		
		//botao Pesquisar
		layout.putConstraint(SpringLayout.WEST, botaoConsult,355,SpringLayout.WEST, labelVeiculo);
		layout.putConstraint(SpringLayout.NORTH, botaoConsult,18,SpringLayout.NORTH, painel);
		
		//tabela
		layout.putConstraint(SpringLayout.WEST, resultado,17,SpringLayout.WEST, painel);
		layout.putConstraint(SpringLayout.NORTH,resultado,80,SpringLayout.NORTH, painel);
		
		//botao alugar
		layout.putConstraint(SpringLayout.WEST, botaoAlugar,120,SpringLayout.WEST, painel);
		layout.putConstraint(SpringLayout.NORTH,botaoAlugar,300,SpringLayout.NORTH, painel);
		
		//botao Reservar
		layout.putConstraint(SpringLayout.WEST, botaoReservar,180,SpringLayout.WEST, botaoAlugar);
		layout.putConstraint(SpringLayout.NORTH,botaoReservar,300,SpringLayout.NORTH, painel);
		
		
		setResizable(false);
		painel.setOpaque(true);
		setContentPane(painel);
		setVisible(true);
		fechaJanela  fecha = new fechaJanela(); 
		
	      

	
	}
	
//--------------------Acoes----------------------
	private class TrataBotao implements ActionListener
	{
	
		public void actionPerformed(ActionEvent evento){
	
		//botao pesquisar
			if(evento.getSource()==botaoConsult){
				
					Veiculos veiculos = new Veiculos();
					List<Veiculos> retorno = veiculos.consultarVeiculos();
					DefaultTableModel dtm = (DefaultTableModel) tabelaConsulta.getModel();
					
					// antes de preencher, limpa todos os dados do JTable, remove linhas em branco da tabela
					while (tabelaConsulta.getRowCount() > 0) {
						dtm.removeRow(0);
					}
					
					for (Iterator<Veiculos> it = retorno.iterator(); it.hasNext();) {
						veiculos = it.next();
						// inclui uma linha no JTable com os dados de um
						// registro retornado
						//
						dtm.addRow(new Object[] { veiculos.getNome(), veiculos.getGrupo(), veiculos.getPlaca()});
					}
		 	}
	}
}
}

Agora sim!

lina

Oi,

Próxima pergunta: Tem certeza que a variável retorno tem o size() > 0 ?

Tchauzin!

victorrgds

Enfim, consegui corrigi e agora pelo menos ta apresentando um erro…rs

segue:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Veiculos.consultarVeiculos(Veiculos.java:124)
	at SearchVehicleView$TrataBotao.actionPerformed(SearchVehicleView.java:123)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2713)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
	at java.awt.EventQueue.access$000(EventQueue.java:101)
	at java.awt.EventQueue$3.run(EventQueue.java:666)
	at java.awt.EventQueue$3.run(EventQueue.java:664)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:680)
	at java.awt.EventQueue$4.run(EventQueue.java:678)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
victorrgds

Sim, pq é para limpar o JTable caso ele já tenha alguma informação…

lina

Oi,

Mostre a linha Veiculos.java:124 aí pra nós.

Tchauzin!

R
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException  
    at Veiculos.consultarVeiculos(Veiculos.java:124)

da uma olhada nesse metodo consultar veiculos, da classe Veiculos, tem algum valor recebendo ou setando null, quando nao poderia estar.

victorrgds

segue a classe veiculos:

import javax.swing.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class Veiculos
{
	protected String nome, grupo, modelo, placa, chassi, acessorios, estado, cidade;
	protected VeiculosDAO veicDAO;
	
	public Veiculos()
	{
		
		setNome(this.nome);
		setGrupo(this.grupo);
		setModelo(this.modelo);
		setPlaca(this.placa);
		setChassi(this.chassi);
		setAcessorios(this.acessorios);
		setEstado(this.estado);
		setCidade(this.cidade);	

	}
	
	public Veiculos(int id,String nome, String grupo, String modelo, String placa, String chassi, String acessorios, String estado, String cidade)
	{
		
		setNome(nome);
		setGrupo(grupo);
		setModelo(modelo);
		setPlaca(placa);
		setChassi(chassi);
		setAcessorios(acessorios);
		setEstado(estado);
		setCidade(cidade);
		
	}
	
	public String getNome()
	{
		return nome;
	}
	
	public void setNome(String nome)
	{
		this.nome = nome;
	}
	
	public String getGrupo()
	{
		return grupo;
	}
	
	public void setGrupo(String grupo)
	{
		this.grupo = grupo;
	}
	
	public String getModelo()
	{
		return modelo;
	}
	
	public void setModelo(String modelo)
	{
		this.modelo = modelo;
	}
	
	public String getPlaca()
	{
		return placa;
	}
	
	public void setPlaca(String placa)
	{
		this.placa = placa;
	}
	
	public String getChassi()
	{
		return chassi;
	}
	
	public void setChassi(String chassi)
	{
		this.chassi = chassi;
	}
	
	public void setAcessorios(String acessorios)
	{
		this.acessorios = acessorios;
	}
	
	public String getAcessorios()
	{
		return acessorios;
	}
	
	public void setEstado(String estado)
	{
		this.estado = estado;
	}
	
	public String getEstado()
	{
		return estado;
	}
	
	public void setCidade(String cidade)
	{
		this.cidade = cidade;
	}
	
	public String getCidade()
	{
		return cidade;
	}

	public List<Veiculos> consultarVeiculos(){
	
		return veicDAO.pesquisar();
	}

}
lina

Oi,

Então… a variavel de conexão com o banco veicDAO está NULL. Ela simplesmente foi criada. Em algum momento você precisará alimenta-la. Onde e quando, eu não sei.

Tchauzin!

victorrgds

Então, oque acontece…como essa parte do sistema vai ser utilizada só para consultar os veiculos disponiveis…então creio eu que ela tenha que estar null para trazer os valores do banco.

Tenho na classe DAO os gets e tal tal tal…

victorrgds

segue a classe DAO:

import javax.swing.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class VeiculosDAO
{
	public VeiculosDAO(){
	
	}
	
	public List<Veiculos> pesquisar() {
		
		ArrayList resultadoPesquisa = new ArrayList<Veiculos>();
		
		String sqlSelect = "SELECT * FROM veiculos";

		PreparedStatement stm = null;
		ResultSet rs = null;
		Connection conn = null;
		
		try {
			AcessoBD bd = new AcessoBD();
			conn = bd.obtemConexao();
			
			stm = conn.prepareStatement(sqlSelect);

			rs = stm.executeQuery();

			while (rs.next()) {
				Veiculos rsc = new Veiculos(
						rs.getInt("idVeiculo"),
						rs.getString("nome"),
						rs.getString("grupo"),
						rs.getString("modelo"),
						rs.getString("placa"),
						rs.getString("chassi"),
						rs.getString("ar"),
						rs.getString("cadeira"),
						rs.getString("gps"));
						resultadoPesquisa.add(rsc);
			}
			return resultadoPesquisa;
			
		} catch (Exception e) {
			e.printStackTrace();
			return resultadoPesquisa;
			
		} finally {
			if (stm != null) {
				try {
					stm.close();
				} catch (SQLException e1) {
					System.out.print(e1.getStackTrace());
				}
			}
		  }
	
	}
}
lina

Oi,

Á sim. Então você precisará apenas instancia-lo na classe Veiculos.java

No lugar de:

protected VeiculosDAO veicDAO;

Coloque:

protected VeiculosDAO veicDAO = new VeiculosDAO();

Tchauzin!

victorrgds

Lina, muito obrigado!!!

tenho que terminar essa budega pra quinta-feira e isso já deu uma livrada na trabalhera que eu estava tendo…rs

Muito obrigado mais uma vez!

Abs,

victorrgds

Agora lina, não querendo abusar…

Mas para eu fazer uma busca mais específica, por exemplo…na minha interface tem um JText para inserir o nome do veiculo, e abaixo tem o JTable que exibe os resultados…eu faria “o mesmo” que foi feito pro JTable só que no JText? e ai ele faria uma pesquisa no banco para, por exemplo, encontrar um corcel 2?

abs

lina

Oi,

Crie um método pesquisar(String) em seu DAO que irá receber uma String ls_where (por exemplo) e no select você utilizaria ela: select pitititi where carro=’"+ls_where+"’

OBS: Esse método pesquisar(String) será utilizado quando pressionado no botão PESQUISAR e quando o conteudo do JTextField for not null or not empty().

Tchauzin!

victorrgds

seria praticamente o mesmo método anterior correto?

oque mudaria é que captura a string do JText?

R

Desculpa, mas eu, particulamente, não entendi essa sua dúvida, pode ser mais claro ?

Abraços =D

R

hehehe, postei atrasado, ja vi o que voce quer ^^

lina
victorrgds:
seria praticamente o mesmo método anterior correto?

oque mudaria é que captura a string do JText?

Oi,

Isso. Na verdade, não precisa nem criar outro método. Faz assim:

VeiculosDAO.java

public List<Veiculos> pesquisar(String ls_where) {
		
		ArrayList resultadoPesquisa = new ArrayList<Veiculos>();
		
		String sqlSelect = ls_where != null && ls_where.isEmpty() ? "SELECT * FROM veiculos where nome='"+ls_where+"'" : "SELECT * FROM veiculos";

		PreparedStatement stm = null;
		ResultSet rs = null;
		Connection conn = null;
		
		try {
			AcessoBD bd = new AcessoBD();
			conn = bd.obtemConexao();
			
			stm = conn.prepareStatement(sqlSelect);

			rs = stm.executeQuery();

			while (rs.next()) {
				Veiculos rsc = new Veiculos(
						rs.getInt("idVeiculo"),
						rs.getString("nome"),
						rs.getString("grupo"),
						rs.getString("modelo"),
						rs.getString("placa"),
						rs.getString("chassi"),
						rs.getString("ar"),
						rs.getString("cadeira"),
						rs.getString("gps"));
						resultadoPesquisa.add(rsc);
			}
			return resultadoPesquisa;
			
		} catch (Exception e) {
			e.printStackTrace();
			return resultadoPesquisa;
			
		} finally {
			if (stm != null) {
				try {
					stm.close();
				} catch (SQLException e1) {
					System.out.print(e1.getStackTrace());
				}
			}
		  }
	
	}

Veiculos.java

public List<Veiculos> consultarVeiculos(String ls_where){  
      
        return veicDAO.pesquisar(ls_where);  
    }

Ação do botão:

List<Veiculos> retorno = veiculos.consultarVeiculos(textVeiculo.getText());

Acho que funciona ...

Tchauzin!

victorrgds

lina, a questão da pesquisa deu certo sim, mas logo quando vi ja previa que ia acontecer isso:

eu coloco qualquer nome, ele tras todos que tem no banco, tipo…ele não faz uma busca especifica mesmo…

um exemplo melhor, se eu colocar “celta” no jtext, ele tras: ferrari, fusca, etc etc…

victorrgds

É rof…então…hauhauhua

pq fazendo isso já vai ser meio caminho andado nesse projetinho sem vergonha…só que eu to tendo esse probleminha ai pra fazer pesquisa especifica…

lina

victorrgds:
lina, a questão da pesquisa deu certo sim, mas logo quando vi ja previa que ia acontecer isso:

eu coloco qualquer nome, ele tras todos que tem no banco, tipo…ele não faz uma busca especifica mesmo…

um exemplo melhor, se eu colocar “celta” no jtext, ele tras: ferrari, fusca, etc etc…

Oi,

Então é porque o where não funcionou. Se você digitou CELTA, ele deveria retornar CELTA. Uái.

Que na verdade o programa deveria ficar assim:

SELECT * FROM veiculos where nome='celta';

Escrevendo esse post eu notei o erro. Faltou a negação no IF ternário!

Mude para isso:

String sqlSelect = ls_where != null && !ls_where.isEmpty() ? "SELECT * FROM veiculos where nome='"+ls_where+"'" : "SELECT * FROM veiculos";

:wink:

Tchauzin!

victorrgds

é, realmente…

lina, muito obrigado por todo o apoio que vc prestou pra mim aqui hoje. (mais uma vez)

E um bom feriadão!

Abs

lina

victorrgds:
é, realmente…

lina, muito obrigado por todo o apoio que vc prestou pra mim aqui hoje. (mais uma vez)

E um bom feriadão!

Abs

Oi,

Sem problemas. Só Edit o seu primeiro post e coloque a tag [RESOLVIDO]

Tchauzin!

Criado 10 de outubro de 2012
Ultima resposta 10 de out. de 2012
Respostas 24
Participantes 3