Botões Proximo, Anterior

Boa noite pessoal.

Estou desenvolvendo um aplicativo desktop em Java e gostaria de saber como vocês fazem para implementar o código dos botões primeiro, anterior, próximo, ultimo. Consegui fazer o código dos botões primeiro e ultimo, mas os outros não esta funcionando. Estou usando o exemplo da apostila CALEUM fj21 (é para WEB mas estou usando a parte do banco somente como exemplo). Tambem gostaria de saber se está correto minha implementação em MVC, estou ainda no primeiro ano da faculdade, quase nem falamos muito deste assunto, mas já quero começar a desenvolver usando este padrão. Qual a melhor forma de implementar isso em MVC?? Tem vários exemplos na net mas gostaria da opinião de vocês. Segue código:

PACOTE: MODELO

[code]public class Item {
private int CodIte;
private String DesIte;
private int PesIte;

getters e setters padrao….
}[/code]

PACOTE: DAO

[code]public class Dao {
private Connection conexao;
private ResultSet rs;
Item item;
List itens = new ArrayList();

public static Connection getConnection() throws SQLException {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Conectado a MySql");
        return DriverManager.getConnection("jdbc:mysql://localhost/javaponto", "root", "sa");
    } catch (ClassNotFoundException e) {
        throw new SQLDataException(e.getMessage());
    }
}

public Dao() throws SQLException {
    this.conexao = getConnection();
}[/code]

// BOTAO PRIMEIRO

[code]public List consultaPrimeiroItem() throws SQLException {
String sql = “SELECT * FROM CADITE”;
PreparedStatement stmt = conexao.prepareStatement(sql);
rs = stmt.executeQuery();

    List<Item> menorItem = new ArrayList<Item>();

    rs.first();
    Item item = new Item();
    item.setCodIte(rs.getInt("CODITE"));
    item.setDesIte(rs.getString("DesIte"));
    item.setPesIte(rs.getInt("PesIte"));

    menorItem.add(item);
    rs.close();
    stmt.close();

    return menorItem;
}

[/code]
PACOTE VISAO:

private void jbAnteriorActionPerformed(java.awt.event.ActionEvent evt) { try { Dao dao = new Dao(); List<Item> itens = dao.consultaAnteriorItem(); if (itens.size() > 0) { for (Item item : itens) { jtfCodIte.setText(String.valueOf(item.getCodIte())); jtfDesIte.setText(item.getDesIte()); jtfPesIte.setText(String.valueOf(item.getPesIte())); } } } catch (SQLException ex) { Logger.getLogger(CadastroItens.class.getName()).log(Level.SEVERE, null, ex); } }

ESTA GERANDO O SEGUINTE ERRO:
10/08/2009 20:51:37 view.CadastroItens jbAnteriorActionPerformed
SEVERE: null
java.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:815)
at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2593)
at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2734)

Cara opite por usar um JTable para a navegação, por que essa parada de botões põe a usabilidade do seu sistema lá embaixo…

Boa idéia, não tinha pensado nisso, vou começar a usar, se tiver algum problema posto aqui.

Algum exemplo de JTable?

Nao to conseguindo fazer… como faço pra passa isso atravez de métodos, ou seja, tenho o pacote DAO com a classe consulta:

    public String[] consulta() throws SQLException {
        final DefaultTableModel modelo = new DefaultTableModel();
        JTable tabela = new JTable(modelo);
        String sql = "SELECT * FROM CADITE";
        PreparedStatement stmt = conexao.prepareStatement(sql);
        rs = stmt.executeQuery();
        

        while (rs.next()) {
            
            Integer CodIte = rs.getInt("CodIte");
            String DesIte = rs.getString("DesIte");
            Integer PesIte = rs.getInt("PesIte");
            
            modelo.addRow(new Object[]{new Integer(CodIte), DesIte, new Integer(PesIte)});
        }
        return str;

        rs.close();
        stmt.close();

    }

E tenho o paco te VIEW com a tela no botao consulta:

    private void jbNovoActionPerformed(java.awt.event.ActionEvent evt) {
        Item it = new Item();
        String[] vetorItem = new String[3];
        try {
            vetorItem = dao.consulta();

        } catch (SQLException ex) {
            Logger.getLogger(CadastroItens.class.getName()).log(Level.SEVERE, null, ex);
        }
        vetorItem[0] = String.valueOf(it.getCodIte());
        vetorItem[1] = it.getDesIte();
        vetorItem[2] = String.valueOf(it.getPesIte());
        modeloTabela.addRow(vetorItem);
    }

Como faço isso? Como será passado os parametros? List? Array? preciso passa uma coleçao de objetos e nao sei como, ja tentei o List mas nao consegui, tem um exemplo ai?

Veja abaixo:

Crie uma classe TableUtil e jogue esse método dentro:

public static void toGrid(JTable grid, String query) {

        grid.setCellSelectionEnabled(false);
        grid.setColumnSelectionAllowed(false);
        grid.setDragEnabled(false);
        grid.setRowSelectionAllowed(true);

        try {
            sqlConn = sqlConn.getInstancia();
            sqlConn.connect();
            stmt = sqlConn.setPreparedStatement(query);
            ResultSet rs = stmt.executeQuery();
            if (rs != null) {
                ResultSetMetaData metaData = rs.getMetaData();
                int colCount = metaData.getColumnCount();
                Vector cols = new Vector();
                Vector colSize = new Vector();
                for (int column = 0; column < colCount; column++) {
                    cols.addElement(metaData.getColumnLabel(column + 1));
                    colSize.addElement(metaData.getColumnDisplaySize(column + 1));
                }
                Vector lines = new Vector();
                while (rs.next()) {
                    Vector regs = new Vector();
                    for (int i = 1; i <= metaData.getColumnCount(); i++) {
                        regs.addElement(rs.getObject(i));
                    }
                    lines.addElement(regs);
                }
                grid.setModel(new DefaultTableModel(lines, cols));
                for (int i = 0; i < colCount - 1; i++) {
                    grid.getColumnModel().getColumn(i).setPreferredWidth(
                            Integer.parseInt(colSize.get(i).toString()) * 3);
                }

            }
        } catch (SQLException ex) {
            sqlConn.rollback();
            ex.printStackTrace();
        } finally {
            try {                
                stmt.close();
                sqlConn.disconnected();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
    }

Classe Metadata:

package util;

import banco.Conexao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Vector;

public class MetaData {

    private static PreparedStatement stmt;
    private static Conexao sqlConn = null;
    private static ResultSet rs;

    public static Vector tableMetaData(String tableName) {
        Vector lines = new Vector();
        try {
            sqlConn = sqlConn.getInstancia();
            sqlConn.connect();
            stmt = sqlConn.setPreparedStatement("select * from " + tableName);
            rs = stmt.executeQuery();
            ResultSetMetaData rsmt = rs.getMetaData();
            int colCount = rsmt.getColumnCount();
            while (rs.next()) {
                Vector regs = new Vector();
                for (int i = 1; i <= rsmt.getColumnCount(); i++) {
                    regs.addElement(rs.getObject(i));
                }
                lines.addElement(regs);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                rs.close();
                stmt.close();
                sqlConn.disconnected();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        return lines;
    }
}

Faça algumas adptações para o seu caso. Mas é o seguinte, da view você chama esse método e passa a sua JTable e a consulta, e pronto, sua JTable é preenchida.

Abraço…

Ok, vou fazer desta maneira e retornarei os resultados.

Obrigado!

[quote=trentinrossi]Boa noite pessoal.

Estou desenvolvendo um aplicativo desktop em Java e gostaria de saber como vocês fazem para implementar o código dos botões primeiro, anterior, próximo, ultimo. Consegui fazer o código dos botões primeiro e ultimo, mas os outros não esta funcionando. Estou usando o exemplo da apostila CALEUM fj21 (é para WEB mas estou usando a parte do banco somente como exemplo). Tambem gostaria de saber se está correto minha implementação em MVC, estou ainda no primeiro ano da faculdade, quase nem falamos muito deste assunto, mas já quero começar a desenvolver usando este padrão. Qual a melhor forma de implementar isso em MVC?? Tem vários exemplos na net mas gostaria da opinião de vocês.[/quote]

Olha um bom material de estudo sobre MVC está neste link: http://www.guj.com.br/posts/list/129277.java
Vou adicionar este tópico como referência na lista de links sobre MVC que estão na primeira postagem do link que passei. Espero ter colaborado! :wink:

Usar JTable sem quebrar a cabeça??? Use o ObjectTableModel do MarkWeb, procure por ele aqui no fórum e veja lá no blog dele o tutorial.

Não é à toa que o link do ObjectTableModel está aqui na minha assinatura.

Na verdade eu ia dizer para procurar por algum dos teus posts e clicar no link ehehehehehe mas achei que tu não ia gostar da idéia :slight_smile:

Olá pessoal, estou com um problema. No meu programa de cadastro estou querendo navegar entre os registros de uma tabela utilizando botões, porém estou com muita dificuldade. Com o JOptionPane ele move os registros, porém se eu tirar ele, o cursor pára no primeiro registro e não é isso que eu queria. Eu queria avançar os registros conforme eu clicar no botão “proximo”. Vou postar o meu código aqui e aguardo a opinião de vocês. Muito obrigado desde já.

      public class BtnProxActionListener implements ActionListener {
    	        	  public void actionPerformed(ActionEvent e) {
    	        		  String url = "jdbc:mysql://127.0.0.1/javabd2";
    				      String usuario = "root";
    				      String senha = null;
    				      Connection conx;
    	
						try {
							conx = DriverManager.getConnection(url, usuario, senha);
							 stt = conx.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
		                               ResultSet.CONCUR_UPDATABLE);
		                       ResultSet nx = stt.executeQuery("SELECT * FROM cliente"); 
		                   while(nx != null){
		                	      JOptionPane.showMessageDialog(null, "próximo registro");
                                nx.next();
	     	                    txtNmCl.setText(nx.getString("cl_nome"));
	     	           			txtRgCl.setText(nx.getString("cl_rg"));
	     	           			txtCpfCl.setText(nx.getString("cl_cpf"));
	     	           			txtTelCl.setText(nx.getString("cl_tel"));
	     	           			txtEndCl.setText(nx.getString("cl_end"));
	     	         
                           
		                   }
		                   stt.close();
		                   
    	               }catch(SQLException e1){
    	            		e1.printStackTrace();
    	        }
    	           
            }
    	 }