Atualizando o jtable

6 respostas
M
eu nao to conseguindo atualizar o jtable, alguem me da uma luz ai..... eu qro fazer assim...... depois de mandar persquisar o nome do filme eu quero q os resultados aparecam no jtable criado, tipo da um restart nele, so q eu nao to conseguindo... da pra fazer isso??
public class PesquisarFilmes extends JInternalFrame {

	private javax.swing.JPanel jContentPane = null;
	private JTable jTable = null;
	private JScrollPane jScrollPane = null;
	private JButton jButton = null;
	private JTextField jTextField = null;
	Connection connection;
	Vector linhas= new Vector();
	Vector colunas= new Vector();

	
	private DefaultTableModel defaultTableModel = null;   //  @jve:decl-index=0:
	/**
	 * This is the default constructor
	 */
	public PesquisarFilmes(Connection banco) {
		super("",true,true,true,true);
		connection = banco;
		getCabecalho();
		initialize();
	}
	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(500, 263);
		this.setContentPane(getJContentPane());
	}
	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private javax.swing.JPanel getJContentPane() {
		if(jContentPane == null) {
			jContentPane = new javax.swing.JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJButton(), null);
			jContentPane.add(getJTextField(), null);
			jContentPane.add(getJScrollPane(), null);
		}
		return jContentPane;
	}
	/**
	 * This method initializes jTable	
	 * 	
	 * @return javax.swing.JTable	
	 */    
	private JTable getJTable() {
		if (jTable == null) {
			jTable = new JTable();
			jTable.setModel(getDefaultTableModel());
		}
		return jTable;
	}
	/**
	 * This method initializes jScrollPane	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */    
	private JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane.setViewportView(getJTable());
			jScrollPane.setBounds(17, 75, 451, 140);
		}
		return jScrollPane;
	}
	/**
	 * This method initializes jButton	
	 * 	
	 * @return javax.swing.JButton	
	 */    
	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			jButton.setBounds(23, 27, 118, 29);
			jButton.setText("Nome");
			jButton.setToolTipText("Pesquisar Filme Por Nome");
			jButton.addActionListener(new java.awt.event.ActionListener() { 
				public void actionPerformed(java.awt.event.ActionEvent e) {    
					try{
						if(!jTextField.getText().equals("")){
							Statement statement = connection.createStatement();
							String query= "SELECT * FROM FILMES WHERE nome = '"+jTextField.getText()+"'";
							ResultSet rs= statement.executeQuery(query);
							display(rs);
							statement.close();
						}
						
					}
					catch(SQLException sqlex){
						sqlex.printStackTrace();
					}
				}
			});
		}
		return jButton;
	}
	private void display(ResultSet rs) throws SQLException{
		boolean moreRecords = rs.next();
		if (!moreRecords){
			JOptionPane.showMessageDialog(this,"Nenhum registro com esse nome encontrado");
			return;
		}
		try{
			defaultTableModel.setNumRows(0); 
			ResultSetMetaData rsmd = rs.getMetaData();
			do{
				linhas.addElement(getNextRow(rs,rsmd));
			}while(rs.next());
			validate();
			
		}
		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)
			currentRow.addElement(rs.getString(i));
		return currentRow;
	}
	private void getCabecalho(){
		try{
			Statement statement = connection.createStatement();
			String query= "SELECT * FROM FILMES";
			ResultSet rs= statement.executeQuery(query);
			ResultSetMetaData rsmd = rs.getMetaData();
			for(int i=1; i<=rsmd.getColumnCount();++i)
				colunas.addElement(rsmd.getColumnName(i));
			statement.close();
		}
		catch(SQLException sqlex){
			sqlex.printStackTrace();
		}
	}
	
	/**
	 * This method initializes jTextField	
	 * 	
	 * @return javax.swing.JTextField	
	 */    
	private JTextField getJTextField() {
		if (jTextField == null) {
			jTextField = new JTextField();
			jTextField.setBounds(168, 28, 276, 29);
		}
		return jTextField;
	}
	/**
	 * This method initializes defaultTableModel	
	 * 	
	 * @return javax.swing.table.DefaultTableModel	
	 */    
	private DefaultTableModel getDefaultTableModel() {
		if (defaultTableModel == null) {
			defaultTableModel = new DefaultTableModel(linhas,colunas);
		}
		return defaultTableModel;
	}
 }

6 Respostas

F

Tente com este metodo:

validate() ;
M

tentei colocar o validate() no metodo display() mas nao deu certo, nao sei o que to fazendo de errado, a busca ta fazendo certo pq quando eu coloco um nome que nao existe no banco ele retorna uma msg de erro, mas quando o nome existe ele nao ta mostrando no jtable. :cry:

F
Implementei uma classe que utiliza a Jtable vê se ela pode te ajudar!!!
public void ListarProduto(String x) {
		String escolha = x;

		conexao();
		//bloco try responsavel por recuperar o codigo da categoria
		try {
			Stmt = con.createStatement();

			RS =
				Stmt.executeQuery(
					"Select Distinct cod_categoria from Categoria  where categoria = '"
						+ escolha
						+ "'");
			int i = 1;
			if (RS.next()) {

				cod = RS.getString("cod_categoria");
			}

		} catch (SQLException ex) {
			JOptionPane.showMessageDialog(
				null,
				"Erro ao Recuperar o codigo da categoria!",
				"Mensagem",
				JOptionPane.ERROR_MESSAGE);
		}
		//bloco try responsavel por recuperar os dados do produto
		try {

			linha.setNumRows(0);

			Stmt = con.createStatement();

			RS =
				Stmt.executeQuery(
					"Select cod_barra,descricao,fabricante,unidade,precocusto,precovenda,margemlucro,stitributaria  from Produto where cod_categoria ="
						+ Integer.parseInt(cod));

			RS.next();

			ResultSetMetaData rsmd = RS.getMetaData();
			int contlines = 0;
			final int lines = 10;
			for (int q = 1; q <= rsmd.getColumnCount(); q++)
				cabecalho.addElement(rsmd.getColumnName(q));

			do {

				linhas.addElement(proximaLinha(RS, rsmd));
			} while (RS.next());

			linha = new DefaultTableModel(linhas, cabecalho);

		} catch (SQLException ex) {

			JOptionPane.showMessageDialog(
				null,
				"Erro ao Executar a Consulta!",
				"Mensagem",
				JOptionPane.ERROR_MESSAGE);
		}

		fechar();

		linha.fireTableDataChanged();
		jTable1 = new javax.swing.JTable(linha);
		jTable1.setBackground(java.awt.Color.white);

		jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		jTable1.createDefaultColumnsFromModel();
		jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

		try {
			jTable1.addMouseListener(new MouseAdapter() {
				public void mouseClicked(MouseEvent event) {

					codbarra.setText(
						jTable1
							.getValueAt(jTable1.getSelectedRow(), 0)
							.toString());
					descricao.setText(
						jTable1
							.getValueAt(jTable1.getSelectedRow(), 1)
							.toString());
					fabricante.setText(
						jTable1
							.getValueAt(jTable1.getSelectedRow(), 2)
							.toString());
					unidade.setSelectedItem(
						jTable1
							.getValueAt(jTable1.getSelectedRow(), 3)
							.toString());
					precocusto.setText(
						jTable1
							.getValueAt(jTable1.getSelectedRow(), 4)
							.toString());
					precovenda.setText(
						jTable1
							.getValueAt(jTable1.getSelectedRow(), 5)
							.toString());
					margemlucro.setText(
						jTable1
							.getValueAt(jTable1.getSelectedRow(), 6)
							.toString());
					stitributaria.setSelectedItem(
						jTable1
							.getValueAt(jTable1.getSelectedRow(), 7)
							.toString());

				}
			});
		} catch (Exception e) {
		};
		JScrollPane barra = new JScrollPane(jTable1);

		getContentPane().add(barra);
		barra.setBounds(350, 40, 420, 220);
		barra.repaint();
		validate();

	}

	private Vector proximaLinha(ResultSet RS, ResultSetMetaData rsmd) {

		Vector LinhaAtual = new Vector();
		try {

			for (int y = 1; y <= rsmd.getColumnCount(); ++y)
				switch (rsmd.getColumnType(y)) {
					case Types.VARCHAR :
						LinhaAtual.addElement(RS.getString(y));
						break;
					case Types.TIMESTAMP :
						LinhaAtual.addElement(RS.getDate(y));
						break;
					case Types.NUMERIC :
						LinhaAtual.addElement(new Long(RS.getLong(y)));
						break;
				}
		} catch (SQLException e) {
			// e.printStackTrace();
			JOptionPane.showMessageDialog(
				null,
				"Não Existem Produtos Cadastrados !",
				"Mensagem",
				JOptionPane.INFORMATION_MESSAGE);

		}
		return LinhaAtual;
	}
Obs.: A String x que o metodo ListarProduto recebe, se refere as categorias que os produtos pertencem!!!!
M

Modifiquei um pouco o codigo que eu postei ai em cima e tive algum sucesso, mas ainda ta dando alguns erros, tipo… eu dou pesquisar o nome, só que ele nao aparece na tela, só se eu minimizo e depois abro a janela, dai a tabela com o nome aparece. E a tabela nao ta “resetando”, quando eu faco uma nova pesquisa ela teria que apagar a velha e fazer uma nova, mas ela continua extendendo na que ja ta na tela.

F

Para "zerar" a table vc tem que apagar os dados que exixtem n o seu
DefaultTableModel, para fazer isto utilize o seguinte comando:

seuModel.setNumRows(0);

Dê uma olhada codigo acima estou fazendo isto!!!!!

M

fsf valeu pela ajuda cara, agora ta funcionando blz!!!
:grin: :grin: :grin:

Criado 22 de janeiro de 2005
Ultima resposta 24 de jan. de 2005
Respostas 6
Participantes 2