Atualização de um JTbalbe

12 respostas
vertuam

Ola All

Abaixo segue a rotina que estou usando para criar jtable, mas estou com algumas duvidas.

private void showDatabaseTable() {
        try {
            try {
                url = "jdbc:odbc:CollegeMySQL";
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                connection = DriverManager.getConnection(url);
            }
            catch(ClassNotFoundException cnfx) {
                cnfx.printStackTrace();
                JOptionPane.showMessageDialog(null,"O Sistema não obteve acesso ao Banco de Dados");
            }
            catch (SQLException sqlx) {
                sqlx.printStackTrace();
                JOptionPane.showMessageDialog(null,"O Sistema não obteve acesso ao Banco de Dados");
            }
            catch (Exception ex) {
                ex.printStackTrace();
                JOptionPane.showMessageDialog(null,"O Sistema não obteve acesso ao Banco de Dados");
            }
            Connection conexao = DriverManager.getConnection(url);
            Statement st  = conexao.createStatement();
            ResultSet rec = st.executeQuery(
            "SELECT codigo, descricao, unidade FROM Unidades ");
            displayDatabaseRecords(rec);
            st.close();
        }
        catch (SQLException sqlx) {
            sqlx.printStackTrace();
        }
}
    
private void displayDatabaseRecords(ResultSet rS)  throws SQLException {
        boolean moreRecords = rS.next();
        if (!moreRecords) {
        }
        try {
            ResultSetMetaData rs = rS.getMetaData();
            for (int i = 1; i <= rs.getColumnCount(); ++i)
                gridColumns.addElement(rs.getColumnName(i));
            do {
                gridRows.addElement(getNextRow(rS,rs));
            } while (rS.next());
            jTable1 = new JTable(gridRows, gridColumns) {
                public Component prepareRenderer(TableCellRenderer renderer,
                int rowIndex, int vColIndex) {
                    Component c = super.prepareRenderer(renderer, rowIndex, vColIndex);
                    if (rowIndex % 2 == 0 && !isCellSelected(rowIndex, vColIndex)) {
                        c.setBackground(Color.orange);
                    } else {
                        c.setBackground(getBackground());
                    }
                    return c;
                }
            };    
            int vColIndex = 0;
            jTable1.getColumnModel().getColumn(vColIndex).setHeaderValue("CODIGO");
            jTable1.getColumnModel().getColumn(vColIndex).setMaxWidth(80);
            vColIndex = 1;
            jTable1.getColumnModel().getColumn(vColIndex).setHeaderValue("DESCRIÇÃO");
            vColIndex = 2;
            jTable1.getColumnModel().getColumn(vColIndex).setHeaderValue("UNIDADE");
            jTable1.setOpaque(true);
            jTable1.setBackground(new java.awt.Color(255, 255, 255));
            JScrollPane scroller = new JScrollPane(jTable1);
            scroller.setBackground(new java.awt.Color(255, 255, 255));
            scroller.setOpaque(true);
            jPanel1.setBackground(new java.awt.Color(255, 255, 255));
            jPanel1.setOpaque(true);
            jTable1.setRowHeight(20);
            jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            jTable1.setRowSelectionAllowed(true);
            jPanel1.add(scroller);
            scroller.revalidate();
            validate();
        }
        catch(SQLException sqlx) {
            sqlx.printStackTrace();
        }
}
    
private Vector getNextRow(ResultSet rS, ResultSetMetaData rs) throws SQLException {
        Vector currentRow = new Vector();
        for (int i = 1; i <= rs.getColumnCount(); ++i)
            if (rs.getColumnType(i) == Types.VARCHAR) {
                currentRow.addElement(rS.getString(i));
            }
            else {
                //
            }
        return currentRow;
}

Tenho mais alguns botões para incluir, alterar e excluir dados, sendo que quando clico nos botões é aberto um jinternalframe para o usuário incluir seus dados, quando gravo e fecho a janela gostaria que os dados apareçam no jtable, mas para isto tenho que fechar a janela e abrir novamente.

Tem alguma forma de que este jtable seja automaticamente renovado.

No FoxPro outra linguagem de programo tem um comando chamado thisform.refresh(), quando chamo esta função o formulário é refeito como os dados incluídos.

Será que tem alguma coisa parecida no Java, que refaça ou re-chame.

Desde já agradeço

Renato V. Neto
[email removido]

12 Respostas

anjomal

Chame o evento setVisible(false), setVisible(true) do JTable apos atualizar a base de dados de seu JTAble.

falow

t+

vertuam

Mesmo assim tenho que dar um click no jTable para ele atualizar o novo registro.

anjomal

Vc possui algum metodo para atualizar sua base de dados interna ?
ou vc carrega o JTABLE so na inicialização do seu Frame ?

o JTable não reconhece sozinho alterações no SGBD vc tem de atualizar o vetor interno dele.

vertuam

Como faço para atualizar o vertor, chamo novamente a jtable?

vertuam

Camo apenas na inicialização do formulario.

D

vc deve chamar o metodo displayDatabaseRecords() com o RecordSet atualizado, tente:

displayDatabaseRecords( st.executeQuery( "SELECT codigo, descricao, unidade FROM Unidades ") );

depois de atualizar os dados

anjomal

isso ai danieltaranta, ta certo.

E depois chame os metodos setvisible do JTable.

falow

D

eu estou passando por um problema relacionado. Eu tenho uma JTable e para inserir os dados eu abro uma outra janela. Quando eu fecho a janela chamo os métodos para criar a tabela novamente, como eu disse na mensagem anterior.
meu problema é que toda porção da tabela que estava em baixo da janela não é atualizada, e quando eu redinenciono a janela até a tabela sumir e aparecer novamente ela não esta mais atualizada.
Já usei vários métodos depois da atualização:
repaint, update, setViseble. Tanto para a tabela quanto para a janela, mas os resultados são os mesmos!

D

Consequi fazer!

eu primeiro usei o getContentPane().remove(scroller) para remover a tabela e depois usei os metodos iniciais para cria-la novamente.

vertuam

Vou tentar por aqui e ver se da certo.

Desde ja agradeco o tepo disperdicado.

Muito obrigado.

Renato V. Neto

vertuam

Acho que estou fazendo alguma coisa errada.

Não vai nem a base de pedrada.

Quando volta da tela de inclusão de dados, ele atualiza mas some a ultima linha da table ai eu dou dois cliques e atualiza aparecendo a ultima coluna.

Renato

D

Coloca o código aki para o pessoal da uma olhada!

Criado 22 de abril de 2003
Ultima resposta 25 de abr. de 2003
Respostas 12
Participantes 3