Pessoal consigo alimentar a minha jTable com um select, até aí tudo blz. Agora pintou 3 dúvidas:
1ª) O nome das duas colunas saem com o nome do campo no banco, como eu faço para alterar esse nome?
2ª) O retorno do meu select é duas colunas agora como eu faço para a minha jTable ter 3 colunas onde as duas primeiras são alimentas pela select (o usuário não pode alterar) e a outra é um jCheckBox que pode ser editavel (selecionar) pelo usuário?
3ª)Como fazer as colunas geradas a partir do select sairem com largura já definida?
A minha jTable eu gerei no NetBeans 5 (usando matisse) e invoco ao click de um botão alguns métodos gerados por mim para alimentar essa jTable.
Olha os trechos do meu código:
//Método para carregar a jTable de dados da select
public void JTabela(ResultSet pStr){
Grade.removeAll();
try{
ResultSet rs = pStr;
if (rs == null) return;
ResultSetMetaData rsmd = rs.getMetaData();
String[] col = new String[rsmd.getColumnCount()];
for (int it = 0; it < rsmd.getColumnCount(); ++it)
col[it] = rsmd.getColumnLabel(it + 1);
Vector vt = new Vector();
while (rs.next())
{
Object[] row = new Object[rsmd.getColumnCount()];
for (int it = 0; it < rsmd.getColumnCount(); it++)
row[it] = this.getValue(rs, rsmd, it);
vt.add(row);
}
Object[][] lin = (Object[][])vt.toArray(new Object[0][0]);
Grade.setModel(new DefaultTableModel(lin,col));
Grade.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);;
for (int i=0;i < Grade.getColumnModel().getColumnCount();i++)
{
// Configurar o alinhamento das colunas
//DefaultTableCellRenderer r = new DefaultTableCellRenderer();
//r.setHorizontalAlignment(JLabel.RIGHT);
//Grade.getColumnModel().getColumn(i).setCellRenderer(r);
// Configurar o Tamanhos das Colunhas
//Grade.getColumnModel().getColumn(i).setPreferredWidth(100*(i+1));
}
/*JCheckBox renderer = new JCheckBox();
Grade.getColumnModel().getColumn(2).setCellRenderer(DefaultRenderer(renderer));*/
}catch (SQLException sqle){
JOptionPane.showMessageDialog(null,
"Impossível conectar com o Banco de Dados! Código do erro: " + sqle.toString(),
"Erro!",
JOptionPane.ERROR_MESSAGE);
}
}
public Object getValue(ResultSet rs, ResultSetMetaData rsmd, int col) throws SQLException{
if ((rsmd.getColumnType(col + 1) == Types.TIMESTAMP) ||
(rsmd.getColumnType(col + 1) == Types.DATE)){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try{
Date dt = sdf.parse(rs.getString(col+1));
sdf = new SimpleDateFormat("dd/MM/yyyy");
return sdf.format(dt);
}catch (ParseException pe){
return new String();
}
}
return rs.getObject(col +1);
}
Código do botão para invocar a carregar a jTable:
Conexao conexao2 = new Conexao();
try {
conexao2.conexao();
} catch (FileNotFoundException fnfe) {
JOptionPane.showMessageDialog(null,
"Arquivo do Banco de Dados não encontrado! Código do erro: " + fnfe.toString(),
"Erro!",
JOptionPane.ERROR_MESSAGE);
} catch (SQLException sqle) {
JOptionPane.showMessageDialog(null,
"Impossível conectar com o Banco de Dados! Código do erro: " + sqle.toString(),
"Erro!",
JOptionPane.ERROR_MESSAGE);
} catch (IOException ioe) {
JOptionPane.showMessageDialog(null,
"Exceção do tipo IOException gerada! Código do erro: " + ioe.toString(),
"Erro!",
JOptionPane.ERROR_MESSAGE);
} catch (ClassNotFoundException cnfe) {
JOptionPane.showMessageDialog(null,
"Exceção do tipo ClassNotFoundException gerada! Código do erro: " + cnfe.toString(),
"Erro!",
JOptionPane.ERROR_MESSAGE);
}
if (jCheckBoxTodos.isSelected() == true || jTextFieldConsulta.getText() != null){
JOptionPane.showMessageDialog(null,
"Você não pode consultar TODOS com um parâmetro NOME digitado",
"Erro!",
JOptionPane.ERROR_MESSAGE);
}
if (jCheckBoxTodos.isSelected() == false || jTextFieldConsulta.getText() == null){
JOptionPane.showMessageDialog(null,
"Você não pode executar a consulta sem um parâmetro!",
"Erro!",
JOptionPane.ERROR_MESSAGE);
}
if (jCheckBoxTodos.isSelected() == true){
conexao2.setSelect("select e.cod_cli, e.razao_soc from bebwilson.clientes e"
+ " where e.cod_cli = " + Main.jTextFieldConsulta.getText());
conexao2.abrirbanco();
try{
ResultSet rs = conexao2.stm.executeQuery();
JTabela(rs);
}catch(SQLException sqle){
JOptionPane.showMessageDialog(null,
"Impossível conectar com o Banco de Dados! Código do erro: " + sqle.toString(),
"Erro!",
JOptionPane.ERROR_MESSAGE);
}
}else{
conexao2.setSelect("select e.cod_cli, e.razao_soc from bebwilson.clientes e");
conexao2.abrirbanco();
try{
ResultSet rs = conexao2.stm.executeQuery();
JTabela(rs);
}catch (SQLException sqle){
JOptionPane.showMessageDialog(null,
"Impossível conectar com o Banco de Dados! Código do erro: " + sqle.toString(),
"Erro!",
JOptionPane.ERROR_MESSAGE);
}
}