tenho uma Jtable que deveria retornar dados do banco. Ela não mostra os dados na tabela, mas mostra que há dados, pois aparecem linhas em branco. CONSEGUI VER QUE ELA ESTÁ “PUXANDO” OS DADOS, MAS NÃO OS MOSTRA. (OBS: esses dados estão em uma tabela do banco de dados que utiliza chave estrangeira).
Tabelas com chave estrangeira
12 Respostas
Coloca a estrutura das tabelas e o sql que você está fazendo.
Coloca a estrutura das tabelas e o sql que você está fazendo.
private DefaultTableModel modelo = new DefaultTableModel() {
public boolean isCellEditable(int row, int column) {//metodo para linhas e colunas não serem editadas
return false;
}
};
private JTable tabela = new JTable(modelo);
private JScrollPane painel = new JScrollPane(tabela); //Rolagem da tabela
//instanciando os botões
private JButton btSair = new JButton("SAIR");
private JSeparator separar = new JSeparator();
//metodo construtor
public Vis_Cadastro_Armario(int id) {
super("IF/Cadastro Armario/Visualizar");
this.id = id;
preenchendo(id);
//posicionando e definindo tamanho da tela.
this.setBounds(0, 0, 404, 350);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setLayout(null);
this.setLocationRelativeTo(null);
this.setResizable(false);
//coloca uma figura na barra de título da janela
URL url = this.getClass().getResource("/imagens/icone_lôgo.png");
Image imagemTitulo = Toolkit.getDefaultToolkit().getImage(url);
this.setIconImage(imagemTitulo);
armario.setBounds(20, 30, 70, 20);
this.add(armario);//adicionando o JLabel a tela.
tombo.setBounds(170, 30, 90, 20);
this.add(tombo);//adicionando o JLabel a tela.
gavetas.setBounds(150, 70, 70, 50);
this.add(gavetas);
painel.setBounds(10, 120, 300, 190);
this.add(painel);
tabela.getTableHeader().setReorderingAllowed(false);
//criando as colunas
modelo.addColumn("Id_gaveta");
modelo.addColumn("Gaveta");
modelo.addColumn("Letras");
modelo.addColumn("Id_armário");
//posicionando os JTextField's
caixaArmario.setBounds(90, 30, 50, 20);
caixaArmario.setEditable(false);
this.add(caixaArmario);//adicionando o JTextField a tela.
caixaTombo.setBounds(240, 30, 50, 20);
caixaTombo.setEditable(false);
this.add(caixaTombo);
separar.setBounds(0, 80, 400, 200);
this.add(separar);//adicionando o JTextField a tela.
//dimencinando e posicionando os JButton's
btSair.setBounds(320, 280, 70, 20);
btSair.setToolTipText("Sair");
btSair.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fechar();
}
});
this.add(btSair);//adicionando o JButton a tela
this.setVisible(true);
}
public void preenchendo(int id) {
try {
connection = new Conexao().getConnection();
stmt = (Statement) connection.createStatement();
rs = stmt.executeQuery("select * from cadastro_armario where id_armario=" + id);
rs.first();
caixaArmario.setText(rs.getString("armario"));
caixaTombo.setText(rs.getString("num_tombo"));
stmt.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
try {
modelo.setNumRows(0);
connection = new Conexao().getConnection();
stmt = (Statement) connection.createStatement();
rs = stmt.executeQuery("select * from cadastro_gaveta where id_armario=" + id);
rs.first();
do {
modelo.addRow(new Object[]{rs.getString("id_gaveta"), rs.getString("nome"), rs.getString("letras"), rs.getString("id_armario")});
System.out.println(rs.getString("id_gaveta")+" | "+rs.getString("nome")+" | "+rs.getString("letras")+" | "+rs.getString("id_armario"));//teste para visualizar os dados que a tabela deveria ezibir
} while (rs.next());
stmt.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public void fechar() {
this.dispose();
}
-- Estrutura da tabela `cadastro_armario`
--
CREATE TABLE IF NOT EXISTS `cadastro_armario` (
`id_armario` int(11) NOT NULL AUTO_INCREMENT,
`armario` varchar(200) DEFAULT NULL,
`num_tombo` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id_armario`),
UNIQUE KEY `id_armario` (`id_armario`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
-- Estrutura da tabela `cadastro_gaveta`
--
CREATE TABLE IF NOT EXISTS `cadastro_gaveta` (
`id_gaveta` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(200) DEFAULT NULL,
`letras` varchar(200) DEFAULT NULL,
`id_armario` int(11) DEFAULT NULL,
PRIMARY KEY (`id_gaveta`),
KEY `id_armario` (`id_armario`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;
Existe realmente dados que vinculam o id ao id_armario na tabela cadastro_gaveta?
Sim, o códogo da lina 79 a linha 78 preenche ou chama, informações do ‘cadastro_armario’ que irá aparecer em dois texField’s. Já as linhas 94 a 102 preenche ou chama dados do ‘cadastro_gaveta’ que são as informações que deveriam aparecer na tabela.(obs: para cadastrar a gaveta é preciso ter um armário para escolher, selecioná-lo e depois cadastrar uma gaveta).
Sim, o códogo da lina 79 a linha 78 preenche ou chama, informações do ‘cadastro_armario’ que irá aparecer em dois texField’s. Já as linhas 94 a 102 preenche ou chama dados do ‘cadastro_gaveta’ que são as informações que deveriam aparecer na tabela.(obs: para cadastrar a gaveta é preciso ter um armário para escolher, selecioná-lo e depois cadastrar uma gaveta).
tenho uma imagem do problema como faço para te mostrar?
na parte do sql da busca da tabela cadastro_gaveta não teria que ter um while?
mas mesmo assim, eu fiz uns testes aqui (pois não uso o DefaultTableModel) e funcionou normal a adição das linhas. Mas no código eu fiz tabela.setTableModel
na parte do sql da busca da tabela cadastro_gaveta não teria que ter um while?mas mesmo assim, eu fiz uns testes aqui (pois não uso o DefaultTableModel) e funcionou normal a adição das linhas. Mas no código eu fiz tabela.setTableModel
vc colocou tabela.setTableModel onde?
eu ao invés de criar o jtable com o parametro eu configurei pelo método setTableModel.
na parte do sql da busca da tabela cadastro_gaveta não teria que ter um while?mas mesmo assim, eu fiz uns testes aqui (pois não uso o DefaultTableModel) e funcionou normal a adição das linhas. Mas no código eu fiz tabela.setTableModel
vc colocou tabela.setTableModel onde?
acho que entendi, colocou tabela.setTableModel no lugar de DefaultTableModel né?
vc pode me mostrar o que vc fez pq tentei aqui e não consegui.
Esse foi o teste q eu fiz.
package testejtable;
import javax.swing.table.DefaultTableModel;
/**
*
* @author Shubacca
* @date 25/09/2012
*/
public class Teste extends javax.swing.JFrame {
private DefaultTableModel modelo = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
/** Creates new form Teste */
public Teste() {
initComponents();
modelo.addColumn("Nome");
modelo.addColumn("Idade");
jTable1.setModel(modelo);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jLabel2 = new javax.swing.JLabel();
jFormattedTextField1 = new javax.swing.JFormattedTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane1.setViewportView(jTable1);
jLabel1.setText("Nome:");
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jLabel2.setText("Idade:");
jFormattedTextField1.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0"))));
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 217, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jFormattedTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton1)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addComponent(jLabel1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jFormattedTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton1))
.addContainerGap(16, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 597, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 362, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
modelo.addRow(new Object[] {jTextField1.getText(), jFormattedTextField1.getValue()});
}//GEN-LAST:event_jButton1ActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Teste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Teste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Teste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Teste.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Teste().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButton1;
private javax.swing.JFormattedTextField jFormattedTextField1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JTextField jTextField1;
// End of variables declaration//GEN-END:variables
}
como eu faço pra mandar uma imagem? sou nova aqui
Bom a imagem tem que estar hospedada em algum lugar ai vc coloca as tags [ img]o endereco[/img ]