O codigo completo do Frame:
public class Alterar_Cervejas extends JFrame {
private static final long serialVersionUID = 1L;
protected static List<Palet> Cervejas = new ArrayList<>();
private static int id = 1;
private int counter = 0;
public static int getId() {
return id;
}
public void setId(int id) {
Alterar_Cervejas.id = id;
}
public static void main(String[] args) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Windows".equals(info.getName())) { // Para mudar o Design da interface
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
| javax.swing.UnsupportedLookAndFeelException ex) {
System.err.println(ex);
}
Alterar_Cervejas tela = new Alterar_Cervejas();
tela.setLocationRelativeTo(null);
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:
label.setHorizontalAlignment(SwingConstants.CENTER);
break;
case 1:
label.setHorizontalAlignment(SwingConstants.CENTER);
break;
case 2:
label.setHorizontalAlignment(SwingConstants.CENTER);
break;
case 3:
label.setHorizontalAlignment(SwingConstants.CENTER);
break;
case 4:
label.setHorizontalAlignment(SwingConstants.CENTER);
break;
case 5:
label.setHorizontalAlignment(SwingConstants.CENTER);
break;
}
}
return label;
}
}
public Alterar_Cervejas() {
super("Alterar Cervejas");
setMaximumSize(new Dimension(690, 280));
setResizable(false);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setMinimumSize(new Dimension(690, 280));
Alterar_Cervejas.Cervejas = carregarCervejas();
JPanel panel = new JPanel();
panel.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(12, 13, 642, 139);
JTable table_1 = new JTable(new Cerveja_A_TableModel());
table_1.setRowSelectionAllowed(false);
table_1.setBounds(0, 0, 248, 154);
table_1.setDefaultRenderer(Object.class, new PalletCellRenderer());
table_1.getColumnModel().getColumn(0).setMaxWidth(30);
table_1.getColumnModel().getColumn(1).setMaxWidth(100);
table_1.getColumnModel().getColumn(2).setMaxWidth(100);
table_1.getColumnModel().getColumn(3).setMaxWidth(50);
table_1.getColumnModel().getColumn(4).setMaxWidth(50);
table_1.getColumnModel().getColumn(5).setMaxWidth(400);
scrollPane.setViewportView(table_1);
JButton btnAtualizar = new JButton("Atualizar");
btnAtualizar.setEnabled(false);
Cerveja_A_TableModel.addTableCellListener(() -> {
counter++;
if (counter == 1) {
int i = table_1.getEditingRow();
Alterar_Cervejas.this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
btnAtualizar.setEnabled(true);
btnAtualizar.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
btnAtualizar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
verify(i);
}
});
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
int key = JOptionPane.showConfirmDialog(null, "Deseja salvar as alterações?");
if (key == JOptionPane.YES_OPTION) {
verify(i);
} else if (key == JOptionPane.NO_OPTION) {
Estoque_Visualization.contador = 0;
// Estoque_Visualization frame = new Estoque_Visualization();
// frame.setExtendedState(MAXIMIZED_BOTH);
// frame.setVisible(true);
Alterar_Cervejas.this.dispose();
}
}
});
}
});
JMenuBar menuBar = new JMenuBar();
JMenu mnRetornar = new JMenu("Retornar");
mnRetornar.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
Estoque_Visualization.contador = 0;
Alterar_Cervejas.this.dispose();
}
});
menuBar.add(mnRetornar);
GroupLayout groupLayout = new GroupLayout(getContentPane());
groupLayout.setHorizontalGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(menuBar, GroupLayout.DEFAULT_SIZE, 484, Short.MAX_VALUE)
.addGroup(groupLayout.createSequentialGroup().addGap(10)
.addComponent(panel, GroupLayout.DEFAULT_SIZE, 464, Short.MAX_VALUE).addGap(10))
.addGroup(groupLayout.createSequentialGroup().addGap(305).addComponent(btnAtualizar)
.addContainerGap(304, Short.MAX_VALUE)));
groupLayout.setVerticalGroup(groupLayout.createParallelGroup(Alignment.LEADING).addGroup(groupLayout
.createSequentialGroup()
.addComponent(menuBar, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGap(12).addComponent(panel, GroupLayout.DEFAULT_SIZE, 164, Short.MAX_VALUE).addGap(18)
.addComponent(btnAtualizar).addGap(14)));
panel.setLayout(null);
panel.add(scrollPane);
getContentPane().setLayout(groupLayout);
}
public void verify(int i) {
Palet palet = Alterar_Cervejas.Cervejas.get(i);
palet.setUltima_mod(Teste_funcs.Relogio());
Teste_funcs.Atualizar_Cerveja(palet);
Estoque_Visualization.contador = 0;
Alterar_Cervejas.this.dispose();
}
private List<Palet> carregarCervejas() {
List<Palet> pallets = new ArrayList<>();
Teste_funcs.listar_Cerveja_PS(pallets);
return pallets;
}
}
class Cerveja_A_TableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
@Override
public boolean isCellEditable(int lin, int col) {
if (lin >= 0 && (col == 1 || col == 2 || col == 3)) {
return true;
}
return false; // as células das outras coluna pode editar
}
// a Jtable chama esse método pra saber quantas colunas ela tem
@Override
public int getColumnCount() {
return 6;
}
// a Jtable chama esse método pra saber quantas linhas ela tem
@Override
public int getRowCount() {
return Alterar_Cervejas.Cervejas.size();
}
@Override
public String getColumnName(int column) {
// TODO Auto-generated method stub
switch (column) {
case 0:
return "ID";
case 1:
return "Nome";
case 2:
return "Distribuidor";
case 3:
return "Preço";
case 4:
return "Total";
case 5:
return "Última Modificação";
}
return super.getColumnName(column);
}
// 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) {
switch (col) {
case 0:
return Alterar_Cervejas.Cervejas.get(lin).getId();
case 1:
return Alterar_Cervejas.Cervejas.get(lin).getNome();
case 2:
return Alterar_Cervejas.Cervejas.get(lin).getDistribuidor();
case 3:
return Alterar_Cervejas.Cervejas.get(lin).getPreco();
case 4:
return Alterar_Cervejas.Cervejas.get(lin).getTotal_cerveja();
case 5:
return Alterar_Cervejas.Cervejas.get(lin).getUltima_mod();
}
return null;
}
// a JTable chama este método pra aplicar o valor que foi inserido na célula
// informada pelos parametros lin e col
@Override
public void setValueAt(Object conteudo, int lin, int col) {
try {
Palet palet = Alterar_Cervejas.Cervejas.get(0);
switch (col) {
case 1:
palet.setNome((String) conteudo);
break;
case 2:
palet.setDistribuidor((String) conteudo);
break;
case 3:
palet.setPreco(Float.parseFloat((String) conteudo));
break;
}
tableCellListeners.forEach(TableCellListener::cellValueChanged);
} catch (Exception e) {
e.printStackTrace();
}
}
private static List<TableCellListener> tableCellListeners = new ArrayList<>();
public interface TableCellListener {
void cellValueChanged();
}
public static void addTableCellListener(TableCellListener listener) {
tableCellListeners.add(listener);
}
}
As funções utilizadas(estão em uma classe separada só para funções):
public static void Atualizar_Cerveja(Palet Cerveja) {
String sql = "UPDATE `DB_Estoque`.`Cerveja` SET `nome`= ?, `distribuidor`= ? , `preco`= ? , `ultima_mod`= ? WHERE `id`= ? ;";
Connection conn = Conexao.getConnection();
try {
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, Cerveja.getNome());
ps.setString(2, Cerveja.getDistribuidor());
ps.setFloat(3, Cerveja.getPreco());
ps.setString(4, Cerveja.getUltima_mod());
ps.setInt(5, Cerveja.getId());
ps.executeUpdate();
Conexao.Fechar_Conexao(conn, ps);
System.out.println(Cerveja.getDistribuidor());
JOptionPane.showMessageDialog(null, "Registro atualizado com sucesso.");
} catch (SQLException e) {
e.printStackTrace();
}
}
public static String Relogio() {
Date data = new Date();
SimpleDateFormat formatar = new SimpleDateFormat("d/" + "M/" + "y " + "H:" + "m:" + "s");
String relogio = formatar.format(data);
/*
* y Year M Month m minute D Day in Year d Day in Month H Hour in day h Hour
* am/pm S Millisecond s Second
*/
return " Modificado por " + Estoque_Visualization.getUser() + " em: "+ relogio;
}