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

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

Oi,

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

Tchauzin!

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!

Oi,

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

Tchauzin!

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)

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

Oi,

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

Tchauzin!

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.

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();
	}

}

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!

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…

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());
				}
			}
		  }
	
	}
}

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!

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,

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

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!

seria praticamente o mesmo método anterior correto?

oque mudaria é que captura a string do JText?

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

Abraços =D

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

[quote=victorrgds]seria praticamente o mesmo método anterior correto?

oque mudaria é que captura a string do JText?[/quote]

Oi,

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

VeiculosDAO.java

[code]public List 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());
			}
		}
	  }

}[/code]

Veiculos.java

[code]public List consultarVeiculos(String ls_where){

    return veicDAO.pesquisar(ls_where);  
}[/code]

Ação do botão:

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

Acho que funciona …

Tchauzin!