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;
}
}
Atualizando o jtable
6 Respostas
Tente com este metodo:
validate() ;
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. 
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;
}
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.
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!!!!!
fsf valeu pela ajuda cara, agora ta funcionando blz!!!
