Como preencher JTable com dados do banco e inserir JCheckBox

2 respostas
J
Como faço para colocar Jcheck Box nos valores Booleanos Me ajudem...
public class CarregaTabela{  

	//***********************CRIA O MODELO VISUAL DA TABELA*********************  

	public static int numColunas = 0;//Número de colunas do ResultSet  
	public static int linhas = 0; //Número de linhas do ResultSet  
	static int posLinha;

	public static int manuseia_tabelaFixa(JTable tabela, String sql, int[] tam){  
		try {
			ConexaoAccess conexao = new ConexaoAccess();
			Connection 	conn = conexao.Conectar();
			PreparedStatement ps = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
			ResultSet rs = ps.executeQuery();
			rs.last(); 
			//			rs.last(); //Posiciona-se o cursor no último registro do ResultSet  
			linhas = rs.getRow(); //Passa-se o número da última linha (que começa em 1) para o inteiro "linhas"  
			//			int numColunas;
			if (linhas>0){ //Se existir pelo menos uma linha, passa para dentro deste if  
				Vector<String> coluna = new Vector<String>();
				ResultSetMetaData metaData = rs.getMetaData();
				numColunas =  metaData.getColumnCount();
				for(int column = 0; column < numColunas; column++){
					coluna.addElement(metaData.getColumnLabel(column+1));//Cria-se e inicializa-se um objeto Vetor de Strings com os dados do banco de dados. Será o cabeçalho da tabela 
				}
				Object[][] corpo = new Object[linhas][numColunas]; //Cria-se e inicializa-se um objeto Matriz de Strings com n linhas e 7 colunas. Será o corpo de resultados (registros) da tabela.  
				for (int lin=0; lin< linhas; lin++){  
					rs.absolute(lin+1); //Posiciona o cursor na linha corrente do conjunto de resultados, começando com a primeira (1).  
					for (int col = 0; col< numColunas; col++) //Varre todas as colunas de cada linha  
						corpo[lin][col]=rs.getObject(col+1); //PEGA O RESULTADO DE UMA CÉLULA DO RESULTSET, CONVERTE PARA STRING E JOGA-O NA MATRIZ  
				}//fim for  
				DefaultTableModel modelo = new DefaultTableModel(corpo, coluna.toArray()); //CRIA-SE UM NOVO MODELO DE TABELA  
				tabela.setModel(modelo); //ATRIBUI TAL MODELO NA TABELA JTABLE DA APLICAÇÃO 
				for (int cont = 0; cont< numColunas; cont++) //Varre todas as colunas de cada linha  
					tabela.getColumnModel().getColumn(cont).setPreferredWidth(tam[cont]);
				for (int cont = 0; cont< numColunas; cont++) //Varre todas as colunas de cada linha  
					tabela.getColumnModel().getColumn(cont).setMaxWidth(tam[cont]*2);
				for (int cont = 0; cont< numColunas; cont++) //Varre todas as colunas de cada linha 
					tabela.getColumnModel().getColumn(cont).setMinWidth(tam[cont]/2);
				tabela.getColumnModel().setColumnMargin(1);
				tabela.setDefaultEditor(Object.class, null);
				tabela.getTableHeader().setReorderingAllowed(false);
				tabela.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
			}//fim if  
			CarregaTabela.coloriLinha(tabela);
			ajustaColunas(tabela);
			rs.close();
			conexao.Desconectar();			
		}catch (Exception e) {
			e.printStackTrace();
		}//fim catch  
		return linhas;
	}//fim do método

	public static void coloriLinha(JTable tabela){
		final Border vermelho = BorderFactory.createLineBorder(Color.red);
		final Border vazia = BorderFactory.createEmptyBorder();
		class CellListener extends MouseMotionAdapter{
			public void mouseMoved(MouseEvent e){
				JTable tb = (JTable)e.getSource();
				posLinha = tb.rowAtPoint(e.getPoint());
				tb.repaint();
			}
		}
		class ColorirCelula extends JLabel implements TableCellRenderer{
			public ColorirCelula(){
				setOpaque(true);
			}
			public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
				if(row == posLinha){
					this.setBackground(Color.yellow);
					this.setBorder(vermelho);
				}else{
					this.setBackground(table.getBackground());
					this.setBorder(vazia);
				}
				this.setText(value.toString());
				return this;
			}
		}
		tabela.addMouseMotionListener(new CellListener());
		tabela.setDefaultRenderer(Object.class,  new ColorirCelula());
	}
		public static void ajustaColunas(JTable tabela) {  
			tabela.setAutoResizeMode(0);  
			FontMetrics fm = tabela.getGraphics().getFontMetrics();  
	
			for(int i = 0; i < tabela.getColumnCount(); i++) {  
				String columnName = tabela.getColumnName(i);  
				TableColumn col = tabela.getColumnModel().getColumn(i);  
				col.setMinWidth(fm.stringWidth(columnName) + 10);  
			}                         
		} 
}//FIM DA CLASSE

2 Respostas

fernandopaiva

Se estiver usando NetBeans basta ir nas propriedades do JTable e marcar como Boolean, pronto ja ta o checkbox la.

Ou crie um AbstractTableModel e retorne Boolean no Class<?> para sua Coluna

veja aqui: http://www.java2s.com/Tutorial/Java/0240__Swing/UsingdefaultBooleanvaluecelleditorandrenderer.htm

t+ e boa sorte.

J

fernandopaiva:
Se estiver usando NetBeans basta ir nas propriedades do JTable e marcar como Boolean, pronto ja ta o checkbox la.

Ou crie um AbstractTableModel e retorne Boolean no Class<?> para sua Coluna

veja aqui: http://www.java2s.com/Tutorial/Java/0240__Swing/UsingdefaultBooleanvaluecelleditorandrenderer.htm

t+ e boa sorte.

Certo mas como eu faço isso usando o eclipse lembrando que este é o metode que carrega tabelas de forma generica…
onde eu passo por parametro o meu sql, a tabela que vou preencher e o tamanho de cada campo;

Criado 29 de dezembro de 2011
Ultima resposta 30 de dez. de 2011
Respostas 2
Participantes 2