Problemas da construção do JTable!

4 respostas
banger

buennas,

bom fiz a conecção com meu banco, mas a construção da tabela tah saindo errada, tpw ao inves de aparecer no Jframe denominado de controleEntrada, ele está montando(ou pelo menos é o que parece) no frame principal, jah verifiquei se o rows e o columnHeads tem informação, e tah ok, jah mechi em varias coisas, jah peksquisei mas naum achei nada que possa me ajudar,

tah ai o codigo:

public void TableDisplay()
{
// O URL que especifica o banco de dados Books ao qual
// esse programa se conecta, utilizando JDBC para conectar a um
// banco de dados Microsoft ODBC.
String url;
String driver;

   Statement stmt;




url = "jdbc:odbc:controlePortas";
driver = "sun.jdbc.odbc.JdbcOdbcDriver";

try {
Class.forName(driver);
con = DriverManager.getConnection(url);
JOptionPane.showMessageDialog(null, "Conectado ao banco");

stmt = con.createStatement();
}
catch (ClassNotFoundException e) {
System.err.println("");
e.printStackTrace();
}
catch (SQLException sqlex) {
System.err.println("");
sqlex.printStackTrace();
}

getTable();

setSize( 450, 150 );
show();
}


private void getTable()
{
Statement statement;
ResultSet resultSet;

try {
String query = "SELECT * FROM controlePortas";

statement = con.createStatement();
resultSet = statement.executeQuery( query );
displayResultSet( resultSet );
statement.close();
}
catch ( SQLException sqlex ) {
sqlex.printStackTrace();
}
}

private void displayResultSet( ResultSet rs )
throws SQLException
{
// posiciona para o primeiro registro
boolean moreRecords = rs.next();
// Se não houver registros, exibe uma mensagem
if ( ! moreRecords ) {
JOptionPane.showMessageDialog( this, "ResultSet contained no records" );
setTitle( "No records to display" );
return;
}


Vector columnHeads = new Vector();
Vector rows = new Vector();

try {
// obtém títulos de coluna
ResultSetMetaData rsmd = rs.getMetaData();

for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
columnHeads.addElement( rsmd.getColumnName( i ) );

// obtém dados da linha
do {
rows.addElement( getNextRow( rs, rsmd ) );
} while ( rs.next() );
// exibe a tabela com conteúdos de ResultSet
table = new JTable( rows, columnHeads );
barra1 = new JScrollPane( table );
getContentPane().add( barra1, BorderLayout.CENTER );
validate();
for(int i = 0; i < columnHeads.size(); ++i){
    System.out.println(columnHeads.get(i));
    
}
}
catch ( SQLException sqlex ) {
sqlex.printStackTrace();
}
}
private Vector getNextRow( ResultSet rs, ResultSetMetaData rsmd )
throws SQLException {
Vector currentRow = new Vector();
for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
switch( rsmd.getColumnType( i ) ) {
case Types.VARCHAR:
currentRow.addElement( rs.getString( i ) );
break;
case Types.INTEGER:
currentRow.addElement( new Long( rs.getLong( i ) ) );
break;
default: System.out.println( "Type was: " + rsmd.getColumnTypeName( i ) );
}

return currentRow; }
public void shutDown()
{
try {
con.close();

}
catch ( SQLException sqlex ) {
System.err.println( "Unable to disconnect" );
sqlex.printStackTrace();
}
}

e aqui e onde eu implemento o metodo:

private void statusEntradaActionPerformed(java.awt.event.ActionEvent evt) {                                              


Tabela.setVisible(true);
barra1.setVisible(true);
barra1.setSize(700,500);
controleEntrada.setVisible(true);
controleEntrada.setSize(708, 532);
controleEntrada.add(barra1);

    TableDisplay();





    }

ele cria o barra1(JScrollPane) mas de tamanho pequenino, naum dah pra ver nada, e ainda por cima ele joga o frame principal novamente para frente.

ajudem me please!!

4 Respostas

ViniGodoy

Rapaz… que bagunça. Você tem mesmo noção do que você está fazendo? Já estudou Swing?

  1. Primeiro de tudo, crie algumas classes de negócio para representar os dados do banco;
  2. Crie algumas classes para ler do banco e criar uma lista de sua classe de negócio;
  3. Crie um TableModel, que indicará para a Table como exibir essa lista;
  4. Aí sim, crie o JTable.

Outras dicas:

  1. Não use Vector. Seu uso não é recomendado desde o java 1.2.
  2. Dê um tipo a lista para não ter que fazer casts;
  3. Use PreparedStatement no lugar do Statement;
  4. Certifique-se de fechar conexões e statements no finally;

E cadê a endentação do seu código? Pq ele está reto desse jeito?

banger

kra sinceramente, eu so iniciante mesmo kra e tenho varias dificuldades, mas isso ai que eu estou fazendo é um estudo particular, pq eu vou pesquisando e vou testando pra aprender,
na verdade este realmente é um estudo de swing, eu estou vendo como ela funciona, utilizando o arquivo JFrame e o netBeans tem, que é a criação de objetos pela a interface do NetBeans, e estou vendo até onde eu consigo ir com esta GUI, mas tah foda.

agora desculpa minha ignorancia, mas no que vc quis dizar “negocio”, seria criar strings que pegariam as infos do banco tpw

col1 = rs.getString("coluna da tabela");

ou eu estou equivocado??

ViniGodoy

O que você sabe sobre Orientação à Objetos?

banger

bom na teoria sei que o poo é simular os objetos do mundo real no sistema, no java no caso, indica-se o objeto, suas instancias, seu estado e comportamento.
agora a dificuldade maior é aplicar este conceito!! vc teria algum tuto pra me indicar para melhor esclarecimento do assunto?

Criado 28 de abril de 2010
Ultima resposta 29 de abr. de 2010
Respostas 4
Participantes 2