JTable

2 respostas
C

Olá Pessoal,

Estou com uma dúvida que já pesquisei e não achei nada que me ajudasse, a questão é a seguinte:
Tenha uma tela no meu sistema que exibe por exemplo as cidades cadastradas pelo usuário, porém estou sendo obrigado a exibir o campo id, pois é através dele que eu faço o “excluir” do meu CRUD que está sendo feito em JDBC, por isso queria saber se alguem sabe uma forma de preencher a coluna 0 da minha JTable porém nao exibi-la?

Obrigado.

Segue código abaixo:

[Preenchimento da tabela]

public class TelaSearchCidade extends TelaPadraoSearch {
	public TelaSearchCidade() {
		DefaultTableModel tabela = (DefaultTableModel) getJTableTabela()
				.getModel();
		tabela.addColumn("Código");
		tabela.addColumn("Nome");
		tabela.addColumn("Estado");
		iniTabela();
		botoes();
		getJFramePrincipal().setVisible(true);
	}

	public void iniTabela() {
		DefaultTableModel tabela = (DefaultTableModel) getJTableTabela()
				.getModel();
		tabela.setNumRows(0);
		ResultSet rs = null;
		if(getJTextFieldLocalizar().getText().isEmpty()){
			rs = Cidade.consultarCidade();
		}else{
			rs = Cidade.consultarCidade(getJTextFieldLocalizar().getText());
		}
		try {
			while (rs.next()) {
				tabela.addRow(new Object[] { rs.getInt("id"),
						rs.getString("nome"), rs.getString("estado") });
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

[Método para exclusão]

private void botoes() {
		getJButtonExcluir().addActionListener(
				new java.awt.event.ActionListener() {
					public void actionPerformed(java.awt.event.ActionEvent e) {
						// TODO evento do botao excluir
						try {
							Cidade cidade = retornaCidade();
							cidade.deletarCidade();
							iniTabela();
						} catch (NullPointerException ex) {
							JOptionPane.showMessageDialog(null,
									"Selecione algum item para ser excluído!",
									"SCP - Software",
									JOptionPane.INFORMATION_MESSAGE);
						}
					}
				});

	private Cidade retornaCidade() {
		Cidade cidade = null;
		int linha = getJTableTabela().getSelectedRow();
		if (!(linha == -1)) {
			cidade = new Cidade();
			cidade.setId((Integer) getJTableTabela().getValueAt(linha, 0));
			cidade.setNome((String) getJTableTabela().getValueAt(linha, 1));
			cidade.setEstado((String) getJTableTabela().getValueAt(linha, 2));
		}
		return cidade;
	}

	public boolean deletarCidade() {
		String sql = "DELETE FROM ccidade WHERE id=" + getId();
		try {
			PreparedStatement pstm = SuporteJDBC.Conexao()
					.prepareStatement(sql);
			return pstm.execute();
		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(null, ex.getMessage(),
					"SCP - Software", JOptionPane.INFORMATION_MESSAGE);
		}
		return true;
	}

2 Respostas

P

Implemente um renderizador especial.

Pesquise sobre TableCellRenderer.

http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/table/TableCellRenderer.html

71C4700

Acredito que a melhor solução seria voce criar seu proprio TAble Model estendendo de AbstractTableModel…

Voce fazia o seguinte, adcionava os objetos do tipo que voce desejase, mostrava apenas as colunas que quisese e quando o usuario selecionar a linha ao inves de pegar o codigo vc pegaria o OBJETO atraves de seu MODEL. Ai vc faria o que bem entendesse…

Um link de como customizar sua JTable implementando seu proprio MODEL

http://www.informit.com/articles/article.aspx?p=332278

Espero ter ajudado…

ps: Só alertando procura tira estes codigo de logica de sua Tela de aplicação, fica meio ‘estranho’

Criado 23 de janeiro de 2009
Ultima resposta 24 de jan. de 2009
Respostas 2
Participantes 3