* * CheckBox no JTable

1 resposta
javaEd.com

Bom dia Galera!!!

Estou com um problema que não consigo resolver, parece simples mas realmente não consegui implementar no meu código!

Preciso apenas colocar valores CHECKBOX no último campo do meu JTable, uso o MySql, e declarei esse campo como char(1), não sei se tem alguma coisa a ver, gostaria apenas disso, ao invés de ter valores false, true, n, s, v, f, quero colocar um CHECK BOX, ticado ou não ticado!!!!!!

Mto obrigado ...

package br.com.edson.banco;

import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class CadastroBD extends JFrame implements ActionListener {

	private static final long serialVersionUID = 1L;
	private JTable tabela;
	private JLabel label;
	private JComboBox cmbSexo, cmbEstado;
	private JScrollPane jsp;
	private JButton btnIncluir, btnExcluir, btnAdd, btnRem;
	private QueryBD modelo;
	Connection conn = null;
	ResultSet rs = null;
	Statement stm = null;

	public CadastroBD() {
		super("Cadastro de Clientes");
		this.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
		this.setUndecorated(true);
		this.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);

		try {
			Class.forName("com.mysql.jdbc.Driver");

			String urlConexao = "jdbc:mysql://localhost:3306/BarTeste";
			String sql = "SELECT id_cli,Nome,Sexo,Uf,DataCli,Ativo FROM Cliente";
			conn = DriverManager.getConnection(urlConexao, "root", " ");
			stm = conn.createStatement(ResultSet.CONCUR_UPDATABLE,ResultSet.TYPE_SCROLL_SENSITIVE);
			rs = stm.executeQuery(sql);

			while (rs.next()) {

				System.out.println(rs.getString("id_cli") + " - "
						+ rs.getString("Nome") + " - " + rs.getString("Sexo")
						+ " - " + rs.getString("Uf") + " - "
						+ rs.getString("DataCli") + " - "
						+ rs.getString("Ativo"));
			}

			centroTela();

			String[] sexos = { "M", "F" };
			cmbSexo = new JComboBox(sexos);

			String[] estados = { "AC", "AL", "AM", "AP", "BA", "CE", "DF",
					"ES", "GO", "MA", "MG", "MS", "MT", "PA", "PB", "PE", "PI",
					"PR", "RJ", "RN", "RO", "RR", "RS", "SC", "SE", "SP", "TO" };
			cmbEstado = new JComboBox(estados);

			modelo = new QueryBD(rs);
			tabela = new JTable(modelo);
			jsp = new JScrollPane(tabela);
			add(jsp, "Center");

			label = new JLabel("<<|>>");
			btnIncluir = new JButton("Incluir");
			btnExcluir = new JButton("Excluir");
			btnAdd = new JButton("Adicionar");
			btnRem = new JButton("Remover");
			btnIncluir.addActionListener(this);
			btnExcluir.addActionListener(this);
			btnAdd.addActionListener(this);
			btnRem.addActionListener(this);

			JPanel panel = new JPanel();
			panel.add(btnIncluir);
			panel.add(btnExcluir);
			panel.add(label);
			panel.add(btnAdd);
			panel.add(btnRem);
			add(panel, "South");

			pack();
			setSize(450, 400);
			setVisible(true);
			setResizable(false);

		} catch (ClassNotFoundException err) {
			err.printStackTrace();
		} catch (SQLException err) {
			err.printStackTrace();
		}

		tabela.getColumn(tabela.getColumnName(0)).setResizable(false);
		tabela.getColumn(tabela.getColumnName(0)).setHeaderValue(modelo.getNomeColuna(0));
		tabela.getColumn(tabela.getColumnName(1)).setResizable(false);
		tabela.getColumn(tabela.getColumnName(1)).setHeaderValue(modelo.getNomeColuna(1));
		tabela.getColumn(tabela.getColumnName(2)).setResizable(false);
		tabela.getColumn(tabela.getColumnName(2)).setCellEditor(new DefaultCellEditor(cmbSexo));
		tabela.getColumn(tabela.getColumnName(2)).setHeaderValue(modelo.getNomeColuna(2));
		tabela.getColumn(tabela.getColumnName(3)).setResizable(false);
		tabela.getColumn(tabela.getColumnName(3)).setCellEditor(new DefaultCellEditor(cmbEstado));
		tabela.getColumn(tabela.getColumnName(3)).setHeaderValue(modelo.getNomeColuna(3));
		tabela.getColumn(tabela.getColumnName(4)).setResizable(false);
		tabela.getColumn(tabela.getColumnName(4)).setHeaderValue(modelo.getNomeColuna(4));
		tabela.getColumn(tabela.getColumnName(5)).setResizable(false);		
		tabela.getColumn(tabela.getColumnName(5)).setHeaderValue(modelo.getNomeColuna(5));
		


	}


	public void actionPerformed(ActionEvent botao) {
		Object btn = botao.getSource();

		if (btn == btnIncluir) {
			Object[] valores = new Object[2];
			valores[0] = JOptionPane.showInputDialog("Digite o nome");
			// valores[1] = JOptionPane.showInputDialog("Digite o sexo");
			// valores[2] = JOptionPane.showInputDialog("Digite o estado");
			valores[3] = JOptionPane.showInputDialog("Digite a data");
			valores[4] = new Boolean(JOptionPane.showInputDialog("Está Ativo?"));
			modelo.addLinha(valores);

		} else if (btn == btnExcluir) {
			if (tabela.getSelectedRowCount() == 0) {
				JOptionPane.showMessageDialog(null,"Não existe linha selecionada");
			} else {
				int[] linha = tabela.getSelectedRows();
				for (int i = linha.length - 1; i >= 0; i--) {
					modelo.removeLinha(linha[i]);
				}
			}
		}

		if (btn == btnRem) {


		}
	}

	public void centroTela() {

		Dimension tela = Toolkit.getDefaultToolkit().getScreenSize();
		setSize(450, 400);
		setLocation((tela.width - this.getSize().width) / 2,
				(tela.height - this.getSize().height) / 2);
	}

	public static void main(String[] args) {
		new CadastroBD();
	}

}

*****************

package br.com.edson.banco;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import javax.swing.table.AbstractTableModel;


public class QueryBD extends AbstractTableModel{

	private static final long serialVersionUID = 1L;
	private ResultSet rs = null;
	private ResultSetMetaData rsmt = null;


	public QueryBD(ResultSet rs) {
		this.rs = rs;

		try {
			rsmt = rs.getMetaData();
			rs.first();
		}catch(SQLException sqlException) {
			sqlException.printStackTrace();
		}

	}

	public int getColumnCount() {
		int coluna = 0;

		try {
			coluna = rsmt.getColumnCount();
		}catch(SQLException	sqlException) {
			sqlException.printStackTrace();
		}

		return coluna;
	}

	public int getRowCount() {
		int qtdLinha = 0;
		int linhaAtual = 1;

		try {
			linhaAtual = rs.getRow();
			rs.last();
			qtdLinha = rs.getRow();

			if (linhaAtual > 0 )
				rs.absolute(linhaAtual);

		}catch(SQLException sqlException) {
			sqlException.printStackTrace();
		}

		return qtdLinha;
	}

	public String getNomeColuna(int coluna) {
		String nomeColuna = "";

		try {
			nomeColuna = rsmt.getColumnName(coluna + 1);
		}catch(SQLException sqlException) {
			 sqlException.printStackTrace();
		}

		return nomeColuna;
	}

	public void setValueAt(Object valor, int linha, int coluna) {

		try {
			rs.absolute(linha + 1);
			rs.updateObject(coluna + 1, valor);
			rs.updateRow();
		}catch(SQLException sqlException) {
			sqlException.printStackTrace();
		}
	}

	public boolean isCellEditable(int linha, int coluna) {

		if (coluna == 0) {
			return false;
		}

		return true;
	}

	public void addLinha(Object[] linha) {
		try {
			rs.moveToInsertRow();
			for (int i = 0; i < linha.length; i++) {
				rs.updateObject(i + 2, linha[i]);
			}
			rs.updateRow();
			fireTableDataChanged();

		} catch (SQLException sqlException) {
			sqlException.printStackTrace();
		}
	}

	public void removeLinha(int linha) {
		try {
			rs.absolute(linha + 1);
			rs.deleteRow();

			fireTableRowsDeleted(linha, linha);

		} catch (SQLException sqlException) {
			sqlException.printStackTrace();
		}
	}

	public Object getValueAt(int linha, int coluna) {
		Object valor = null;
		try {
			rs.absolute(linha + 1);
			valor = rs.getObject(coluna + 1);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return valor;
	}


}

1 Resposta

ViniGodoy

Sobrescreve também o método getColumnClass no seu TableModel. E faz a última coluna retornar Boolean.class.
Depois, o getValue deve retornar um valor booleano também nessa coluna. E você vai ter que tratar o setValueAt para receber um boolean e guardar o char. (Aliás, não é mais fácil trocar no banco para boolean de um vez?)

Criado 28 de agosto de 2008
Ultima resposta 28 de ago. de 2008
Respostas 1
Participantes 2