Parametros [ RESOLVIDO]

Fala Galera Beleza??

Espero que sim.

Tentarei ser breve na minha ultima duvida referente a esse projeto.

Bom Estava com muitas duvidas mas o pessoal que tem força de vontade de ensinar e tal me ajudou e Muito.

Porém ainda falta algo

Tenho MENU CADASTRO DE MUNICIPIOS

Nela eu apenas cadastrei os Municipios DE SP E RS.

RS --> CANOAS
SP --> Suzano

Beleza até ai funcionando

Sendo assim… Agora tenho meu MENU BAIRRO.
No bairro montei uma logica. na classe

BairroEscolherUFaction

que ao Selecionar uma UF na COMBOBOXUF

mostrará o resultado do municipio cadastrado na COMBOBOXmUNICIPIO

Sendo assim até ai bleza tudo funcionando.

PORÉM A DUVIDA.

Ná hora de gravar o registro está alternando…

Se eu quiser salvar por exempo Primeiro a UF de SP NO BAIRRO DE SP
Ao invés de Salvar em SP

Salva em RS.

Ou seja Não tem um parametro.

Preciso saber como fazer para salvar aonde preciso.

acredito que a causa disso seja meu While. meu loop no caso.

Postando A CLASSE.

caso alguem saiba Obrigado.


classe

// Evento que da ação a combobox UF
	@Override
	public void actionPerformed(ActionEvent euf) {
		UFVO uf = (UFVO) view.getUfJComboBox().getSelectedItem();
		Integer municipio = (Integer) view.getMunicipioJComboBox()
				.getSelectedIndex();

		try {

			if (uf.isSelecionado()) {
				CarregaObjetosnacombo(uf);

			} else if (view.getMunicipioJComboBox().getSelectedIndex() != 1) {
				view.CarregaBairro(municipio);

			}

		} catch (BairroException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(view, "erro1");
		} catch (DataBaseException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(view, "erro2");
		} catch (Exception e) {
			e.printStackTrace();

		}

	}

	// metodo responsavel por carregar operacoes no evento Action performed da
	// combobox

	public void CarregaObjetosnacombo(UFVO uf) throws BairroException,
			DataBaseException {
		List<Bairro> listBairros = new ArrayList<Bairro>();
		ResultSet rs = null;
		PreparedStatement query = null;
		Connection connection = null;
		String sql = null;
		Bairro domain = null;

		try {

			connection = DataSource.getConnection();

			sql = "SELECT  nm_municipio  FROM municipio " + "WHERE id_uf = ?";
			System.out.println(sql);

			try {

				// Municipio domain2 = new Municipio();

				query = connection.prepareStatement(sql);

				query.setString(1, uf.toString());

				rs = query.executeQuery();

				if (view.getUfJComboBox().getSelectedItem() != null) {
					rs.equals(domain);
					rs.next();

					domain = new Bairro();
					domain.setMunicipio(new Municipio());
					// domain.getMunicipio().setId(rs.getInt("id_municipio"));
					domain.getMunicipio().setNome(rs.getString("nm_municipio"));
					domain.getMunicipio().setUF(uf);

					// view.getMunicipioJComboBox().setSelectedIndex(rs.getInt("id_municipio"));

					view.getMunicipioJComboBox().addItem(
							rs.getString("nm_municipio"));

					listBairros.add(domain);

				} else {
					rs.first();
				}

				if (view.getMunicipioJComboBox().getSelectedItem() != null) {
					rs.next();

				}

			} catch (Exception cause) {
				cause.printStackTrace();
				JOptionPane.showMessageDialog(view,
						" Não foi possivel carregar " + cause);

			}

		} catch (Exception cause) {
			cause.printStackTrace();
			JOptionPane
					.showMessageDialog(view, "Não foi possivel fazer Select");

		} finally {

			DataSource.close(connection);
		}

	}

	public void limpaUF() {
		final DefaultTableModel model;

		model = (DefaultTableModel) view.getBairrosJTable().getModel();

		model.getDataVector().clear();

		view.getBairrosJTable().updateUI();

	}







Ao invés de usar o getSelectedIndex, mude para getSelectedItem e manda mostrar o que esta selecionando, creio eu que você usando o getSelectedIndex você deve estar em algum lugar definindo valores a ele e com o getSelectedItem não seleciona a posição e sim o item selecionado.
Teoricamente dizendo não muda nada… massss… quem sabe não resolve.


Eu coloco o index  para informar que  id_municipio é do tipo int .

[quote=markIron][code]

Eu coloco o index para informar que id_municipio é do tipo int .

[/code][/quote]

O getSelectedIndex() até aonde eu sei (não trabalho com Swing) retorna apenas a posição que está selecionada no combo box.

Se você tiver algo como:

Acre
Distrito Federal
São Paulo
Rio de Janeiro

e selecionar Distrito Federal ele vai retornar 1 pois Distrito Federal está na posição 1 do ComboBox (vai de 0 a n-1 onde n é a quantidade de elementos no ComboBox).



Entendi.. porém 

Se eu colocar selectedItem..

da um erro e não deixa salvar


[quote=markIron][code]

Entendi… porém

Se eu colocar selectedItem…

da um erro e não deixa salvar

[/code][/quote]

Eu presumo que você tenha uma classe Município e essa classe possui um campo chamado código (ou algo próximo disso) com um getter.

Você provavelmente tem um combobox de municípios (pelo o que eu entendi) e nesse combobox você o populou com objetos do tipo Municipio.

Municipio municipio = (Municipio) view.getMunicipioJComboBox()  
                .getSelectedItem();
Integer intMunicipio = municipio.getCodigo();

Integer municipio = view.getMunicipioJComboBox().getSelectedItem().


Cara  é mais ou menos isso mesmo

porém quando vc falou isso eu reparei 

o erro está na ação do botão

BairroOkaction que está com os codigos assim




public void actionPerformed(ActionEvent e) {

		try {

			String NomeBairro = view.getNomeJTextField().getText();
			String municipio2 = (String) view.getMunicipioJComboBox()
					.getSelectedItem();

			Integer municipio = (Integer) view.getMunicipioJComboBox().getSelectedItem();
			
			UFVO uf = (UFVO) view.getUfJComboBox().getSelectedItem();

			Bairro domain;

			if (view.getaAlterar() != null) {
				domain = (Bairro) view.getaAlterar();

			} else {
				domain = new Bairro();
			}

			domain.setNome(NomeBairro); // seta o nome do bairro


			
			//Integer municipio = new Integer(0);
			domain.setMunicipio(new Municipio());
			domain.getMunicipio().setId(municipio);
			/**for (int i = 0; i <= view.getMunicipioJComboBox().getSelectedIndex(); i++) {
				if (view.getMunicipioJComboBox().getSelectedIndex() == 0) {
					view2.rs.next();
					view2.mostrando();
					
				}
		
				
			}*/
			
			domain.getMunicipio().setNome(municipio2);

			
			
			
			
			view.getService().validar(domain); // valida
			view.getService().salvar(domain); // salva
			view.carrega_nome_bairro(NomeBairro, uf);

		} catch (Exception cause) {
			cause.printStackTrace();
			JOptionPane.showMessageDialog(view, "erro ao carregar");
		}

	}

mas é bom por ai mesmo... só não sei como transformar isso em getselectedItem.. 


Você vai precisar de uma classe Municipio e popular o ComboBox com objetos desse tipo.


Já tenho a Classe Municipio

[quote=markIron][code]

Já tenho a Classe Municipio

[/code][/quote]

Você populou o combobox com objetos da classe Municipio?

E poste aqui a classe Municipio.



Classe Municipio

package br.com.impacta.cliente.domain.model;

import java.io.Serializable;

import br.com.impacta.cliente.domain.exception.MunicipioException;

/**
 * Classe que representa município.
 * 
 * @author FELIPE,  M.I
 * @since Novembro de 2013
 * @version 1.0
 * 
 * @see Entidade
 * @see Serializable
 * @see Comparable
 */
public class Municipio extends Entidade<Integer> implements Serializable,
		Comparable<Municipio> {

	/** serialVersionUID */
	private static final long serialVersionUID = 1855459182715802082L;

	/** Nome do município. */
	private String nome;

	/** Uf do município. */
	private UFVO uf;
	
	

	
	/** Construtor padrão. */
	public Municipio() {
		this(null);
	}

	/**
	 * Construtor informando nome e uf.
	 * 
	 * @param nome
	 *            Nome informado.
	 * @param ufvo
	 *            UF informada.
	 */
	public Municipio(String nome) {
		super();

		this.nome = nome;
		
	}

	/**
	 * Recupera o nome do município.
	 * 
	 * @return Nome
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * Configura o nome do município.
	 * 
	 * @param nome
	 *            Nome do município.
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * Recupera a uf do município.
	 * 
	 * @return UF
	 */
	public UFVO getUF() {
		return uf;
	}

	/**
	 * Configura a uf do município.
	 * 
	 * @param uf
	 *            UF do município.
	 */
	public void setUF(UFVO uf) {
		this.uf = uf;
	}

	/**
	 * Valida o nome do município.
	 * 
	 * @throws MunicipioException
	 *             Lança exception em caso de problemas com o município.
	 */
	public void validarNome() throws MunicipioException {
		// Tratar com Exception usando throws

		// Nome nulo
		if (nome == null) {
			throw new MunicipioException("Nome do município está nulo!");
		}

		// Nome vazio
		if (nome.isEmpty()) { // nome.equals("");
			throw new MunicipioException("Nome do município está vazio!");
		}

		// FIXME Validar REGEX para somente brancos!
		// Nome em branco
		if (nome.matches("^[ ]+$")) { // REGEX
			throw new MunicipioException("Nome do município está vazio!");
		}

		// FIXME Validar REGEX para inválidos!
		// TODO Nome inválido
	}

	/**
	 * Valida a uf do município.
	 * 
	 * @throws MunicipioException
	 *             Lança exception em caso de problemas com o município.
	 */
	public void validarUf() throws MunicipioException {
		// Tratar com Exception
		// UF nula
		if (uf == null) {
			throw new MunicipioException("UF do município está nula!");
		}

		// UF não selecionada
		if (uf.isNotSelecionado()) {
			throw new MunicipioException("UF do município não selecionada!");
		}
	}

	/** {@inheritDoc} */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		result = prime * result + ((uf == null) ? 0 : uf.hashCode());
		return result;
	}

	/** {@inheritDoc} */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Municipio other = (Municipio) obj;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equalsIgnoreCase(other.nome))
			return false;
		if (uf == null) {
			if (other.uf != null)
				return false;
		} else if (!uf.equals(other.uf))
			return false;
		return true;
	}

	/** {@inheritDoc} */
	@Override
	public int compareTo(Municipio outro) {
		int comp = uf.compareTo(outro.uf);

		if (comp == 0) {
			comp = nome.compareToIgnoreCase(outro.nome);
		}

		return comp;
	}

	/** {@inheritDoc} */
	@Override
	public Object clone() throws CloneNotSupportedException {
		// throw new CloneNotSupportedException();
		Municipio domain = new Municipio();

		domain.setId(new Integer(getId()));
		domain.setNome(new String(getNome()));
		domain.setUF(getUF());

		return domain;
	}

	/** {@inheritDoc} */
	@Override
	protected void finalize() throws Throwable {
		this.nome = null;
		this.uf = null;

		super.finalize();
	}

	/** {@inheritDoc} */
	@Override
	public String toString() {
		return nome ;
	}
	
	public Object[] toArray() {
		return new Object[] { "ESCOLHA" };
	}
	
}


Essa classe Entidade possui algum código? Digo no sentido de haver algum identificador (como uma chave primária) e que esteja sendo herdada pela classe Município.

E você está populando o combobox com objetos do tipo Municipio?


Classe entidade  será a chave primaria de cada classe



package br.com.impacta.cliente.domain.model;

public abstract class Entidade<PK> {

	private PK id; // Tipo genérico.

	protected Entidade() {
		super();
	}

	public PK getId() {
		return id;
	}

	public void setId(PK id) {
		this.id = id;
	}

	public boolean isNullId() {
		return id == null;
	}

	public boolean isNotNullId() {
		return !isNullId();
	}
}



[quote=markIron][code]

Classe entidade será a chave primaria de cada classe

package br.com.impacta.cliente.domain.model;

public abstract class Entidade {

private PK id; // Tipo genérico.

protected Entidade() {
	super();
}

public PK getId() {
	return id;
}

public void setId(PK id) {
	this.id = id;
}

public boolean isNullId() {
	return id == null;
}

public boolean isNotNullId() {
	return !isNullId();
}

}

[/code][/quote]

Certo e você está populando o combobox com objetos do tipo Municipio?



public void actionPerformed(ActionEvent e) {

		try {

			String NomeBairro = view.getNomeJTextField().getText();
			
			Municipio municipio = (Municipio)  view.getMunicipioJComboBox().getSelectedItem();
			
			//Integer municipios  = municipio.getId();

			
			UFVO uf = (UFVO) view.getUfJComboBox().getSelectedItem();

			Bairro domain;

			if (view.getaAlterar() != null) {
				domain = (Bairro) view.getaAlterar();

			} else {
				domain = new Bairro();
			}

			domain.setNome(NomeBairro); // seta o nome do bairro


			
		
			domain.setMunicipio(new Municipio());
			domain.getMunicipio().setId(municipio.getId());
			
			

			
			
			
			
			view.getService().validar(domain); // valida
			view.getService().salvar(domain); // salva
			view.carrega_nome_bairro(NomeBairro, uf);

		} catch (Exception cause) {
			cause.printStackTrace();
			JOptionPane.showMessageDialog(view, "erro ao carregar");
		}

	}

Com essa linha de código ja devia funcionar.. mas retorna isso




[color=red]java.lang.String cannot be cast to br.com.impacta.cliente.domain.model.Municipio
at br.com.impacta.cliente.app.action.bairro.BairroOkAction.actionPerformed(BairroOkAction.java:44)[/color]


Como assim Populando ??
  Tipo tem uma Classe que faz o select para a Combobox Mucipio pelo resultSet  'String'



Cheguei a um ponto que acho que só preciso de uma conversão de String para Integer ou ao contrario não sei .


sendo assim.. acho que só falta isso



@Override
	public void actionPerformed(ActionEvent e) {

		try {

			String NomeBairro = view.getNomeJTextField().getText();
			
			
	Integer municipio = (Integer)  view.getMunicipioJComboBox().getSelectedItem();
	

	
	//String nomMunicipio = (String) view.getMunicipioJComboBox().getSelectedItem();
			
			
		//	Municipio municipio = (Municipio)  view.getMunicipioJComboBox().getModel().getSelectedItem();
			
			//Integer municipios  = municipio.getId();

			
			UFVO uf = (UFVO) view.getUfJComboBox().getSelectedItem();

			Bairro domain;

			if (view.getaAlterar() != null) {
				domain = (Bairro) view.getaAlterar();

			} else {
				domain = new Bairro();
			}

			domain.setNome(NomeBairro); // seta o nome do bairro


			
			//Integer municipio = new Integer(0);
			domain.setMunicipio(new Municipio());
			domain.setId(municipio);
			
			//domain.getMunicipio().setId(Integer.valueOf(nomMunicipio));
			
			

			
			
			
			
			view.getService().validar(domain); // valida
			view.getService().salvar(domain); // salva
			view.carrega_nome_bairro(NomeBairro, uf);

		} catch (Exception cause) {
			cause.printStackTrace();
			JOptionPane.showMessageDialog(view, "erro ao carregar" + cause.getMessage() + cause.getLocalizedMessage());
		}

	}


Bom dei uma mechida no Codigo e consegui fazer ele salvar por parametros.

Sendo assim  ainda resta um problema ele mostra id_municipio em vez de nm_municipio


tem algum modo de sobreescrever???


está assim..


while (rs.next()) {

					DefaultComboBoxModel<Object> model = new DefaultComboBoxModel<Object>();
					view.getMunicipioJComboBox().setModel(model);

					//Municipio municipio = (Municipio) model.getSelectedItem();
					String municipios = (String) model.getSelectedItem();

				
					model.setSelectedItem(rs.getObject("id_municipio"));
					model.addElement(rs.getObject("nm_municipio"));
					//model.setSelectedItem(rs.getObject("nm_municipio"));

					domain = new Bairro();
					domain.setMunicipio(new Municipio());
					domain.getMunicipio().setNome(municipios);
					domain.getMunicipio().setId(Integer.getInteger(municipios));

					
					domain.getMunicipio().setUF(uf);

					listBairros.add(domain);

				}

			} catch (Exception cause) {
				cause.printStackTrace();
				JOptionPane.showMessageDialog(view,
						" Não foi possivel carregar " + cause);

			}

		} catch (Exception cause) {
			cause.printStackTrace();
			JOptionPane
					.showMessageDialog(view, "Não foi possivel fazer Select");

		} finally {

			DataSource.close(connection);
		}

	}







[color=red] For input string: “canoas”[/color]

erro



Bom...dei uma mechida no Codigo  e consegui fazer algumas mudanças.


sendo assim.. o problema é..

na classe Escolher uf Action...


Eu consigo salvar no Banco se somente selecionar o id_municipio na combobox.. pelo campo do Banco  ser do tipo int

porém se eu colocar vamos supor  NA COMBOBOX  -->  (1  CANOAS)

não salva e da um erro assim..



java.lang.String cannot be cast to java.lang.Integer
	at br.com.impacta.cliente.app.action.bairro.BairroOkAction.actionPerformed(BairroOkAction.java:59)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)


erro dessa classe..


BairroOkAction


	public void actionPerformed(ActionEvent e) {

		Bairro domain;

		try {

			String NomeBairro = view.getNomeJTextField().getText();
			UFVO uf = (UFVO) view.getUfJComboBox().getSelectedItem();



			
			
			String nome = (String) view.getMunicipioJComboBox().getSelectedItem().toString();
			
			Integer municipio = (Integer) view.getMunicipioJComboBox().getSelectedItem();
			


			if (view.getaAlterar() != null) {
				domain = (Bairro) view.getaAlterar();

			} else {
				domain = new Bairro();
			}

			
					
			
			domain.setNome(NomeBairro); // seta o nome do bairro
			domain.setMunicipio(new Municipio());
			domain.getMunicipio().setNome(String.valueOf(municipio));

			domain.getMunicipio().setId(municipio);

			view.getService().validar(domain); // valida
			view.getService().salvar(domain); // salva
			view.carrega_nome_bairro(NomeBairro, uf);



como reoslver essa questa..