oi…
to com um probleminha com Jtable… já vi em vários foruns como criar as tabelas e tudo mais… mas não consigo fazer isso usando o net beans… será q alguém pode me ajudar???
passo a passo como faço para criar uma tabela simpes,(que mostre minhas consultas sql, no NETBEANS?
Jtable
14 Respostas
Vou postar um codigo bem simples, nao tem customizacao alguma.
Coloque um JTable no seu form.
String arr[][] = new String[listaPesquisa.size()][2];
String arr2[] = {"Nome", "Telefone"};
for (int i = 0; i < listaPesquisa.size(); i++) {
arr[i][0] = listaPesquisa.get(i).getNome();
arr[i][1] = listaPesquisa.get(i).getTelefone();
}
DefaultTableModel tb = new DefaultTableModel(arr, arr2);
jTable1.setModel(tb);
oi de novo...
mas como é que eu faço pra me conectar a base de dados pra ir buscar a query? nao tem nenhum tutorial a explicar passo a passo?// exibe os dados da tabela MySQL
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/xpto", "root","1234");
// procedimentos para obter os dados de uma tabela
Statement stmt = con.createStatement();
String query = "SELECT * FROM produtos";
ResultSet rs = stmt.executeQuery(query);
com este codigo eu conecto me a minha base de dados... agora nao consigo é mostrar o a informaçao na minha jtable????
que código preciso d acrescentar?
vc tem que percorrer o result set, e ir populando a linha da JTable
No netbeans, eu crio a tabela vazia, ajusto o tamanho e a posição adequada, e altero o nome da variavel ao meu gosto. Depois vou no código, crio um modelo, adiciono as colunas e linhas e seto na tabela.
Ex:
DefaultTableModel modelo = new DefaultTableModel();
//Adicionando as colunas
modelo.addColumn(new String[]{"Nome do Produto","Preço","..."});
//Adicionando os conteúdos
modelo.addRow(new Object[]{rs.getString("nome"),rs.getDouble("preço"),"..."});
//setando o modelo na tabela criada no netbeans
tabelaNetbeans.setModel(modelo);
EDIT:
Se você fizesse uma classe produto, com os atributos e os métodos get e set facilitaria muito. Caso contrário, você pode colocar os títulos das colunas, e no conteúdo você coloca: rs.getString(“nome da coluna da tabela”), sendo quem no lugar de String pode ser: int, float double etc… vai depender do tipo de dado na tabela.
nao dava para explicar melhor? nao oconsegui perceber?
Eu fiz um for em um list, voce deve fazer um while em seu resultSet.
Voce sabe trabalhar com o ResulSet ?
Vou dar um exemplo:
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/xpto", "root", "1234");
DefaultTableModel modelo;
modelo.addColumn(new String[]{"Nome do Produto", "Preço"});
Statement stmt = con.createStatement();
String query = "SELECT * FROM produtos";
ResultSet rs = stmt.executeQuery(query);
//preenchendo as linhas da tabela
while (rs.next()) {
modelo.addRow(new Object[]{rs.getString("nome"), rs.getDouble("preço")});
}
//setando o modelo na tabela
suaTabela.setModel(modelo);
public class RecpcaoMat extends javax.swing.JFrame {
public RecpcaoMat() {
//try{ //tratamento de erros
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/xpto", "root","1234");
Statement stmt = con.createStatement();
String query = "SELECT * FROM produtos";
ResultSet rs = stmt.executeQuery(query);
// DefaultTableModel model;
model.addColumn(new String[]{"Nome do Produto", "Preço"});
//preenchendo as linhas da tabela
while (rs.next()) {
model.addRow(new Object[]{rs.getString("nome"), rs.getDouble("preço")});
}
//setando o modelo na tabela
jTable1.setModel(model);
initComponents();
}
}
mas ta dando o codigo todo soblinhado a vermelho, usa algum import?
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;
import java.sql.*;
public class RecpcaoMat extends javax.swing.JFrame {
public Main() {
initComponents();
try {
DefaultTableModel model = new DefaultTableModel();
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/xpto", "root", "1234");
Statement stmt = con.createStatement();
String query = "SELECT * FROM produtos";
ResultSet rs = stmt.executeQuery(query);
// DefaultTableModel model;
model.addColumn(new String[]{"Nome do Produto", "Preço"});
//preenchendo as linhas da tabela
while (rs.next()) {
model.addRow(new Object[]{rs.getString("nome"), rs.getDouble("preço")});
}
//setando o modelo na tabela
jTable1.setModel(model);
} catch (ClassNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Obs: Para funcionar, você tem que ter os campos nome e preço no banco de dados, e o campo preço tem que ser do tipo double… se não for, vai da erro.
[color=darkblue] Nesse tópico aqui tem mais ajuda, caso você precise :[/color]
fogo eu e as jtabes nao nos damos mesmo bem…
boolean consulta=true; //variável auxiliar utilizada para informar se houve sucesso na consulta
try{//tratamentos de erros
DefaultTableModel modelo = new DefaultTableModel();//null, new String[] {"Nome", "Cliente", "Referencia"});
//jTable1 = new JTable(modelo);
Class.forName("com.mysql.jdbc.Driver");//criando uma nova instancia de conexao
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/xpto", "root", "1234"); //criando uma nova conexao indicando um novo caminho
Statement stmt = con.createStatement(); // objecto comando sql
String ConsNome = jTextField1.getText();
//String ConsCliente = jTextField4.getText();
//String ConsReferencia = jTextField4.getText();
ResultSet RS = stmt.executeQuery("Select* from logistica_produtos where Nome= '"+ ConsNome + "'");
while (RS.next()){
se fosse pra aparecer num text eu fazia assim agora por aparecer numa jtable nao tou a consegui
//jTextField2.setText(RS.getString("Cliente"));
//jTextField1.setText(RS.getString("Nome"));
//jTextField3.setText(RS.getString("Referencia"));
consulta=false;
JOptionPane.showMessageDialog(this,"Dados Encontrados!");
}
if (consulta)JOptionPane.showMessageDialog(this,"Dados não Encontrados");
RS.close();
stmt.close();
con.close();// fecha conexao com a BD
}catch (SQLException e){ // trata erros
JOptionPane.showMessageDialog(this,"Erro com SQL"+e.getMessage());
}catch (ClassNotFoundException e){
JOptionPane.showMessageDialog(this,"drive não encontrado");
entao vou explicar o que eu preciso
eu tou a fazer uma consulta base de dados com o jTextField e quando carrego no botao ele vai a base de dado consultar a consulta k fiz. Até aqui tudo legal, agora o que eu pretendia era que ela quando fizesse a consulta me mostrasse os dados na Jtable…
se fosse pra mostrar num jTextField e conseguia mas como é o jtable eu n tou a conseguir…
será que dava pra me ajudar…
Bom como ja foi dito anteriormente, você declara uma DefaultTableModel antes do while, ou então uma tableModel personalizada.
Dentro do while você popula sua tableModel assim como ja foi mostrado acima em outro post.
E fora do while você coloca o nome da sua jTable aquela que vc criou com o assistente grafico do netbeans pega o nome dela e da um setModel com o modelo. É algo +/- do jeito q ta o código ai.
boolean consulta=true; //variável auxiliar utilizada para informar se houve sucesso na consulta
try{//tratamentos de erros
DefaultTableModel modelo = new DefaultTableModel();
model.addColumn(new String[]{"Nome", "Cliente", "Referencia"});
//jTable1 = new JTable(modelo);
Class.forName("com.mysql.jdbc.Driver");//criando uma nova instancia de conexao
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/xpto", "root", "1234"); //criando uma nova conexao indicando um novo caminho
Statement stmt = con.createStatement(); // objecto comando sql
String ConsNome = jTextField1.getText();
//String ConsCliente = jTextField4.getText();
//String ConsReferencia = jTextField4.getText();
ResultSet RS = stmt.executeQuery("Select* from logistica_produtos where Nome= '"+ ConsNome + "'");
while (RS.next()){
model.addRow(new Object[]{rs.getString("Nome"), rs.getString("Cliente"), rs.getString("Referencia")});
}
nomeDaSuaJTable.setModel(modelo);
RS.close();
stmt.close();
con.close();// fecha conexao com a BD
}catch (SQLException e){ // trata erros
JOptionPane.showMessageDialog(this,"Erro com SQL"+e.getMessage());
}catch (ClassNotFoundException e){
JOptionPane.showMessageDialog(this,"drive não encontrado");
ei markin1, obrigado… pela ajuda realmente era mesmo facil, mas quanto mais eu olhava mais asneira fazia
abraço
Eu usaria:
http://markytechs.wordpress.com/2009/05/29/objecttablemodel/
ou
E deixaria desta forma o codigo, ou mais ou menos assim:
1. Uma classe pra trabalhar com os dados e fazer pesquisas....
2. Uma classe pra armazenar as informaçoes da maneira que desejo....
3. Utilizar algum destes modelos citados a cima.
E no codigo...
public class TrabalhaComConnection {
// Tenta fazer assim acho que fica mais facil
private Connection con;
private Statement stmt;
TrabalhaComConnection() {
try {
Class.forName("com.mysql.jdbc.Driver"); //criando uma nova instancia de conexao
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/xpto", "root", "1234"); // objecto comando sql
stmt = con.createStatement(); // objecto comando sql
} catch (SQLException ex) {
Logger.getLogger(TrabalhaComConnection.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(TrabalhaComConnection.class.getName()).log(Level.SEVERE, null, ex);
}
}
//Abstraia como esta sendo feito a pesquisa, retorne apenas um List
public List<ClienteVO> localizaPorNome(String nome) {
List<ClienteVO> clientes = new ArrayList<ClienteVO>();
try {
ResultSet resultadoDaPesquisa = stmt.executeQuery("Select* from logistica_produtos where Nome= '" + nome + "'");
while (resultadoDaPesquisa.next()) {
clientes.add(new ClienteVO(resultadoDaPesquisa.getString("Nome"),
resultadoDaPesquisa.getString("Cliente"),
resultadoDaPesquisa.getString("Referencia")));
}
resultadoDaPesquisa.close();
stmt.close();
con.close();// fecha conexao com a BD
return clientes;
} catch (SQLException e) { // trata erros
System.out.println(e);
}
return new ArrayList<ClienteVO>();
}
// Cria esta classe apenas pra exibir os dados na JTable
class ClienteVO {
@Resolvable(colName = "Name")
private String nome;
@Resolvable(colName = "Cliente")
private String cliente;
@Resolvable(colName = "Referencia")
private String referencia;
public ClienteVO(String nome, String cliente, String referencia) {
this.nome = nome;
this.cliente = cliente;
this.referencia = referencia;
}
public String getCliente() {
return cliente;
}
public void setCliente(String cliente) {
this.cliente = cliente;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getReferencia() {
return referencia;
}
public void setReferencia(String referencia) {
this.referencia = referencia;
}
}
}
Ai na sua interface visual faria algo do tipo:
public void pesquisaEvent(ActionListener evt){
TrabalhaComConnection connection = new TrabalhaComConnection();
List<ClienteVO> list = connection.localizaPorNome(seuTextField.getText());
AnnotationResolver resolver = new AnnotationResolver(ClienteVO.class);
ObjectTableModel<Person> tableModel = new ObjectTableModel<Person>(resolver,"nome,cliente,referencia");
tableModel.setData(list);
}
Pronto!
Simples e reapido pra se trabalhar com objetos na sua JTable!
Att...