bom galera eh o seguinte, eu criei uma JTable q exibe um Resultset,
faço uma consulta e vou varrendo coluna por coluna do ResultSet e adicionando os objetos na JTable, porem se ( somente se ) meu Resultset tiver menos linhas do q a altura do meu JScrollPane q contem a tabela ele duplica a primeira linha…
tipo… se meu ResultSet retornar menos de 24 linhas ele duplica a primeira, caso contraio ele exibe os dados corretamente
me ajudem, não sei pq isso ta acontecendo… ja tentei atribuir null para a variavel linha a cada interação do meu while(rs.next()) mais nem adiantou
import java.awt.*;
import javax.swing.*;
import java.util.Vector;
import java.sql.*;
import javax.swing.table.*;
public class resultadoJFrame
{
// System.out.println(a.linha);
private String dsn;
private String dbUser;
private String dbPassword;
private Connection bd;
private Statement st;
private ResultSet rs;
private String nome_setor ="";
private JTable tabela = new JTable();
private float[] soma =new float[2];
private JLabel tot_act;
private JLabel tot_comp;
private JLabel total = new JLabel("Total:");
private JButton voltar=new JButton("Voltar");
private JButton imprimir=new JButton("Imprimir");
JFrame frame =null;
private StringBuffer dados_imp = new StringBuffer();
private Vector paginas = new Vector();
public void iniciaFrame(String palavra,String tipo_consulta)
{
this.nome_setor =nome_setor;
try{
// Conexão com Access
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
dsn = "jdbc:odbc:arh";
bd = DriverManager.getConnection(dsn, dbUser, dbPassword);
st = bd.createStatement();
// the query
ResultSet rs=null;
if(tipo_consulta.compareToIgnoreCase("setor")==0){
rs = st.executeQuery("Select matricula,nome,comp_act,horas_comp from funcionarios where nome_setor like '%"+palavra+"%' and comp_act<>'0,0'");
}else{
rs = st.executeQuery("Select matricula,nome,comp_act,horas_comp from funcionarios where nome like '%"+palavra+"%' and comp_act<>'0,0'");
}
// Loop through the ResultSet and transfer in the Model
java.sql.ResultSetMetaData rsmd = rs.getMetaData();
int colNo = rsmd.getColumnCount()+1;
String[] tableColumnsName = {"Item","Matricula","Nome","horas act", "horas comp."};
DefaultTableModel aModel = (DefaultTableModel)tabela.getModel();
aModel.setColumnIdentifiers(tableColumnsName);
// Desabilitando o auto resize
tabela.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// Manipulando o tamanho das colunas
String act="";
String comp="";
int x=0;
Object[] linha = new Object[colNo];
while(rs.next()){
x++;
// tanks to umit ozkan for the bug fix!
for(int i=0;i<colNo;i++){
if(i%5==0){
linha[0]=String.valueOf(x);
System.out.println(linha[i]);
}else{
linha[i]=rs.getObject(i);
System.out.println(linha[i]);
}
if(i>=3&&linha[i]!=null){
String s =(linha[i].toString()).replaceAll(",",".");
soma[i-3]+=Float.parseFloat(s);
}
}
aModel.addRow(linha);
/*if(x%50==0){
paginas.add(String.valueOf(dados_imp));
dados_imp.delete(0, dados_imp.length());
}
dados_imp.append(linha[0]+" "+linha[1]+" "+linha[2]+" "+linha[3]+" "+linha[4]+" "+"\n");*/
}
if(dados_imp.length()>0){
paginas.add(String.valueOf(dados_imp));
}
tabela = new JTable(aModel);
}
catch(Exception e){
e.printStackTrace();
}
JScrollPane painel = new JScrollPane(tabela);
frame = new JFrame("Consulta dos prestadores");
frame.getContentPane().setLayout(null);
int width = 0;
TableColumn col=null;
for(int vColIndex = 0; vColIndex<5;vColIndex++){
col = tabela.getColumnModel().getColumn(vColIndex);
if(vColIndex==0){
col.setPreferredWidth(30);
}else{
if(vColIndex==2){
col.setPreferredWidth(160);
System.out.println("160");
}else{
col.setPreferredWidth(40);
System.out.println("40");
}
}
}
tot_act = new JLabel(String.valueOf(soma[0]).substring(0,String.valueOf(soma[0]).indexOf(".")+2));
tot_comp = new JLabel(String.valueOf(soma[1]).substring(0,String.valueOf(soma[1]).indexOf(".")+2));
voltar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
actionVoltar(evt);
}
});
imprimir.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
actionImprimir(evt);
}
});
frame.getContentPane().add(painel);
frame.getContentPane().add(tot_act);
frame.getContentPane().add(tot_comp);
frame.getContentPane().add(total);
frame.getContentPane().add(voltar);
// frame.getContentPane().add(imprimir);
total.setBounds(300,420,60,15);
tot_act.setBounds(360,420,50,15);
tot_comp.setBounds(440,420,50,15);
voltar.setBounds(80,420,100,20);
//imprimir.setBounds(190,420,100,20);
painel.setBounds(10,10,500,400);
frame.setSize(530,480);
frame.show();
}
private void actionVoltar(java.awt.event.ActionEvent evt) {
frame.dispose();
}
private void actionImprimir(java.awt.event.ActionEvent evt) {
new ImprimirResultado(paginas);
}
public static void main(String args[])
{
resultadoJFrame cn = new resultadoJFrame();
cn.iniciaFrame("nucap","setor");
}
}