Valeu mesmo, para falar a verdade ficou até melhor do que eu estava pensando, muito obrigado!
Só que tem um outro porém kkk
Eu queria que os valores além de serem listados, pudessem ser editados para fazer uma modificação no estoque.
Eu tenho uma função para listar a tabela do DB e uma para editar só que tenho que implementar essas de um jeito que funcionem na Jtable. Eu saberia fazer caso fosse Jtext mas ainda sou novo com o swing e ainda n to sabendo muito lidar com as tabelas.
(No caso eu tenho um botão para cada palet que é passado um ID e vai fazer uma tabela apenas para aquele palet)
As funções são as seguintes:
public static void update_palet_Prepared_Statement(Palet palet) {
String sql = "UPDATE `DB_Estoque`.`Palet` SET `laco`= ?, `altura`= ? , `total`= ? , `cerveja_id`= ? , `ultima_mod`= ? WHERE `id`= ? ;";
Connection conn = Conexao.getConnection();
try {
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, palet.getLaco());
ps.setInt(2, palet.getAltura());
ps.setInt(3, palet.getTotal());
ps.setInt(4, palet.getCerveja_id());
ps.setString(5, palet.getUltima_mod());
ps.setInt(6, palet.getId());
ps.executeUpdate();
Conexao.Fechar_Conexao(conn, ps);
JOptionPane.showMessageDialog(null, "Registro atualizado com sucesso.");
} catch (SQLException e) {
e.printStackTrace();
}
}
public static List<Palet> Search_by_id_palet_Prepared_Statement(int id) {
String sql = "SELECT id, laco, altura, total, cerveja_id FROM DB_Estoque.Palet where id like ?";
Connection conn = Conexao.getConnection(); // Abrindo conexão
List<Palet> ListaPalet = new ArrayList<>();
try {
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, id);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
ListaPalet.add(new Palet(rs.getInt("id"), rs.getInt("laco"), rs.getInt("altura"), rs.getInt("total"), rs.getInt("cerveja_id")));
}
Conexao.Fechar_Conexao(conn, ps, rs); // Fechando conexão
return ListaPalet;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
Feitas algumas modificações do seu codigo o meu ficou assim, por enquanto eu estou chamando a função só para listar:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import classes.Palet;
import main.Teste_funcs;
public class Teste_Palet extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
Teste_Palet tela = new Teste_Palet();
tela.setDefaultCloseOperation(EXIT_ON_CLOSE);
tela.setVisible(true);
}
private class PalletCellRenderer implements TableCellRenderer {
private JLabel label = new JLabel();
@Override
public Component getTableCellRendererComponent(JTable table, Object conteudo, boolean selecionado, boolean focado, int lin, int col) {
label.setText(String.valueOf(conteudo));
if (col == 0) {
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setBackground(table.getTableHeader().getBackground());
label.setOpaque(true);
} else {
label.setOpaque(false);
switch (lin) {
case 0:
case 1:
case 2:
label.setHorizontalAlignment(SwingConstants.RIGHT);
break;
case 3:
label.setHorizontalAlignment(SwingConstants.LEFT);
break;
case 4:
label.setHorizontalAlignment(SwingConstants.CENTER);
break;
}
}
return label;
}
}
protected static List<Palet> palets;
public Teste_Palet() {
super("Modificação Estoque");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setMinimumSize(new Dimension(300, 350));
palets = Teste_funcs.Busca_com_id_palet_PS(1);
JTable tablePallets = new JTable(new PalletTableModel());
tablePallets.setDefaultRenderer(Object.class, new PalletCellRenderer());
tablePallets.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
getContentPane().add(new JScrollPane(tablePallets), BorderLayout.CENTER);
}
}
class PalletTableModel extends AbstractTableModel {
/**
*
*/
private static final long serialVersionUID = 1L;
// a Jtable chama esse método pra saber quantas colunas ela tem
@Override
public int getColumnCount() {
return 2; // uma coluna pra ser o "cabeçalho" e mais uma coluna pra cada palet da lista
}
// a Jtable chama esse método pra saber o nome do cabeçalho da coluna informada
@Override
public String getColumnName(int col) {
if (col == 0) {
return "ID";
}
Palet pallet = Teste_Palet.palets.get(col - 1);
return String.valueOf(pallet.getId());
}
// a Jtable chama esse método pra saber quantas linhas ela tem
@Override
public int getRowCount() {
return 5; // uma linha pra cada atributo do pallet exceto o ID, que será o cabeçalho
}
// a Jtable chama esse método pra saber o valor a ser renderizado na linha e
// coluna informados
@Override
public Object getValueAt(int lin, int col) {
if (col == 0) {
switch (lin) {
case 0:
return "LAÇO";
case 1:
return "ALTURA";
case 2:
return "TOTAL";
case 3:
return "CERVEJA";
case 4:
return "ÚLTIMA MODIFICAÇÃO";
}
}
Palet palet = Teste_Palet.palets.get(col - 1);
switch (lin) {
case 0:
return palet.getLaco();
case 1:
return palet.getAltura();
case 2:
return palet.getTotal();
case 3:
return palet.getCerveja_id();
case 4:
return palet.getUltima_mod();
}
return null;
}
}
Basicamente eu queria que ficasse algo semelhante a isso:
