bom dia pessoal estou com a seguinte dúvida: criei uma tela que recebe dois arraylists iguais do tipo (Livro que foi o objeto que eu criei) para alterar um conforme o usuário interage e outra para comparação. só tem um problema, quando eu altero o valor de um arraylist o outro também ta sendo alterado. segue abaixo o objeto criado e logo em seguida o código:
Objeto
public class Livro {
int idLivro, quantidade, volume, idPreco;
float valor;
String idioma, item, nome;
public Livro(int idLivro, int quantidade, int volume, float valor, int idPreco, String idioma, String item, String nome){
this.idLivro = idLivro;
this.quantidade = quantidade;
this.volume = volume;
this.valor = valor;
this.idioma = idioma;
this.item = item;
this.nome = nome;
this.idPreco = idPreco;
}
public int getID() {
return idLivro;
}
public int getIdPreco() {
return idPreco;
}
public int getVolume(){
return volume;
}
public int getQuantidade(){
return quantidade;
}
public String getItem(){
return item;
}
public String getIdioma(){
return idioma;
}
public String getNome(){
return nome;
}
public Float getValor(){
return valor;
}
public void setQuantidade(int valorAlterado){
quantidade = valorAlterado;
}
}
e a tela com as comparações:
package Movimentacao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JLayeredPane;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.border.EtchedBorder;
import BancoDeDados.Conexao;
import javax.swing.JLabel;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JComboBox;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JRadioButton;
import org.apache.commons.lang3.StringUtils;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class AlteracaoPedido extends Conexao {
ResultSet rs;
String sql, idiomaSolicitado, itemSolicitado;
int estoque, idTabelaPreco, idTabelaLivro, quantidadeSolicitada, volumeSolicitado;
float valorLivro;
public boolean teveAlteracao = false;
public static JPanel janela;
JLayeredPane painelCentral;
private JTextField volume;
private JTextField quantidade;
private JTable table;
private JTextField idPedido;
private JTextField qtdAlterar;
public JComboBox orcamento = new JComboBox();
final JLabel lblQuantidadeMximaPermitida = new JLabel();
public ArrayList<Livro> pedidoOld = new ArrayList<Livro>();
public ArrayList<Livro> pedidoNew = new ArrayList<Livro>();
String pedidoEscolhido;
public AlteracaoPedido(){
super();
Inicio();
}
public void limpaArray(){
pedidoOld.clear();
pedidoNew.clear();
}
public void cancela(){
int idNew = 0, idOld = 0, qtdNew = 0, qtdOld = 0, diferenca, estoque = 0, cont;
int regNew = pedidoNew.size(), regOld = pedidoOld.size();
String item;
boolean existe;
if(teveAlteracao == true){
if(JOptionPane.showConfirmDialog(null, "Tem certeza que deseja cancelar?", "Questão", JOptionPane.YES_NO_OPTION) == 0){
//metodos de cancelamento da alteração
//verificando se houve alteração nos ítens originais do pedido
for(Livro p1 : pedidoOld){
cont = 0;
existe = false;
for(Livro p2 : pedidoNew){
diferenca = 0;
estoque = 0;
item = p1.getItem();
idNew = p2.getID();
idOld = p1.getID();
qtdNew = p2.getQuantidade();
qtdOld = p1.getQuantidade();
if(!(item == "B" || item == "D" || item == "F")){
if(idOld == idNew){
JOptionPane.showMessageDialog(null, "qtdNew = "+qtdNew+" - qtdOld = "+qtdOld);
existe = true;
sql = "SELECT quantidade FROM livros WHERE idlivro = "+idOld;
rs = ConsultaBanco(sql);
try {
while(rs.next()){
estoque = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
if(qtdNew > qtdOld){
diferenca = qtdNew - qtdOld;
estoque += diferenca;
JOptionPane.showMessageDialog(null, estoque);
sql = "UPDATE livros SET quantidade = "+estoque+" WHERE idlivro = "+idNew;
GravaBanco(sql);
}else if(qtdNew < qtdOld){
diferenca = qtdOld - qtdNew;
estoque -= diferenca;
JOptionPane.showMessageDialog(null, estoque);
sql = "UPDATE livros SET quantidade = "+estoque+" WHERE idlivro = "+idNew;
GravaBanco(sql);
}
}
}
cont++;
//se existir anteriormente e foi excluído do novo array o estoque tem de ser baixado novamente
if(((cont == regNew) && (existe == false))&& !(item == "B" || item == "D" || item == "F" )){
estoque = 0;
sql = "SELECT quantidade FROM livros WHERE idlivro = "+idOld;
rs = ConsultaBanco(sql);
try {
while(rs.next()){
estoque = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
estoque -= qtdOld;
JOptionPane.showMessageDialog(null, "id "+idOld+" estoque no banco "+estoque);
sql = "UPDATE livros SET quantidade = "+estoque+" WHERE idlivro = "+idOld;
GravaBanco(sql);
}
}
}
}
limpaArray();
alteraTableVisual();
orcamento.setEnabled(true);
}else{
JOptionPane.showMessageDialog(null, "Não houve nenhuma alteração");
}
}
private void alteraTableVisual(){
int cont = 0;
String volume, item, idioma, quantidade, nome;
String [][] linhas = new String[pedidoNew.size()][3];
for (Livro p : pedidoNew) {
volume = String.valueOf(p.getVolume());
item = p.getItem();
idioma = p.getIdioma();
quantidade = StringUtils.leftPad(String.valueOf(p.getQuantidade()),2,"0");
nome = p.getNome();
linhas[cont][0] = StringUtils.leftPad(String.valueOf(cont+1),3,"0");
linhas[cont][2] =quantidade;
switch(item){
case "Prospécto":
case "Amarelo":
linhas[cont][1] = item+" - "+nome+" - "+idioma;
break;
case "Cavaleiro":
linhas[cont][1] = item+" - "+idioma;
break;
case "B":
case "D":
case "F":
linhas[cont][1] = item;
break;
default:
linhas[cont][1] = StringUtils.leftPad(volume,3,"0") + "º Vol - "+item+" - "+idioma;
break;
}
cont++;
}
table.setModel(new DefaultTableModel(linhas, new String[] {"ID", "ÍTEM", "QUANTIDADE"}));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.getColumnModel().getColumn(0).setPreferredWidth(50);
table.getColumnModel().getColumn(1).setPreferredWidth(492);
table.getColumnModel().getColumn(2).setPreferredWidth(120);
}
public void Inicio(){
try{
for(LookAndFeelInfo z:UIManager.getInstalledLookAndFeels()){
if("Nimbus".equals(z.getName())){
UIManager.setLookAndFeel(z.getClassName());
break;
}
}
}catch(Exception e){
JOptionPane.showMessageDialog(null,e);
}
janela = new JPanel();
janela.setBounds(0, 0, 1400, 600);
janela.setLayout(null);
painelCentral = new JLayeredPane();
painelCentral.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
painelCentral.setBounds(27,75,1282,405);
painelCentral.setLayout(null);
janela.add(painelCentral);
JLabel lblEscolhaOOramento = new JLabel("Escolha o or\u00E7amento:");
lblEscolhaOOramento.setFont(new Font("SansSerif", Font.BOLD, 23));
lblEscolhaOOramento.setBounds(314, 11, 257, 30);
painelCentral.add(lblEscolhaOOramento);
orcamento.setFont(new Font("SansSerif", Font.PLAIN, 20));
orcamento.setBounds(583, 15, 403, 30);
painelCentral.add(orcamento);
orcamento.addItem("Selecione");
sql = "SELECT ped.id_pedido, cli.nome_cli FROM pedido ped INNER JOIN clientes cli ON ped.id_cliente = cli.idcliente" +
" WHERE ped.inativo = 0 ORDER BY ped.id_pedido DESC";
rs = ConsultaBanco(sql);
try {
while(rs.next()){
orcamento.addItem(StringUtils.leftPad(rs.getString(1), 5, "0")+" - "+rs.getString(2));
}
} catch (SQLException e) {
e.printStackTrace();
}
JLayeredPane layeredPane = new JLayeredPane();
layeredPane.setBorder(new TitledBorder(null, "OP\u00C7\u00D5ES DE OR\u00C7AMENTO", TitledBorder.CENTER, TitledBorder.ABOVE_TOP, null, null));
layeredPane.setBounds(12, 53, 531, 327);
painelCentral.add(layeredPane);
lblQuantidadeMximaPermitida.setFont(new Font("SansSerif", Font.BOLD | Font.ITALIC, 14));
lblQuantidadeMximaPermitida.setForeground(Color.RED);
lblQuantidadeMximaPermitida.setBounds(124, 233, 289, 19);
lblQuantidadeMximaPermitida.setVisible(false);
layeredPane.add(lblQuantidadeMximaPermitida);
JLabel lblIdioma = new JLabel("Idioma: ");
lblIdioma.setFont(new Font("SansSerif", Font.BOLD, 23));
lblIdioma.setBounds(70, 34, 96, 30);
layeredPane.add(lblIdioma);
final JComboBox idioma = new JComboBox();
idioma.setFont(new Font("SansSerif", Font.PLAIN, 20));
idioma.setBounds(178, 35, 175, 30);
layeredPane.add(idioma);
idioma.addItem("Português");
idioma.addItem("Inglês");
idioma.addItem("Espanhol");
idioma.addItem("Françês");
idioma.addItem("Italiano");
idioma.addItem("Alemão");
idioma.addItem("Árabe");
JLabel label = new JLabel("\u00CDtem:");
label.setFont(new Font("SansSerif", Font.BOLD, 23));
label.setBounds(16, 112, 64, 30);
layeredPane.add(label);
final JComboBox item = new JComboBox();
item.setFont(new Font("SansSerif", Font.PLAIN, 20));
item.setBounds(81, 113, 144, 30);
layeredPane.add(item);
item.addItem("Selecione");
item.addItem("Amarelo");
item.addItem("Obra");
item.addItem("Réplica");
item.addItem("Tréplica");
item.addItem("Histórico");
item.addItem("Cavaleiro");
item.addItem("Prospécto");
item.addItem("B");
item.addItem("D");
item.addItem("F");
JLabel label_1 = new JLabel("Volume:");
label_1.setFont(new Font("SansSerif", Font.BOLD, 23));
label_1.setBounds(282, 112, 93, 30);
layeredPane.add(label_1);
volume = new JTextField();
volume.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent arg0) {
char ch = arg0.getKeyChar();
try{
Integer.parseInt(ch+"");
}catch (NumberFormatException ex){
arg0.consume();
}
}
});
volume.setFont(new Font("SansSerif", Font.PLAIN, 20));
volume.setEnabled(false);
volume.setColumns(10);
volume.setBounds(387, 114, 122, 28);
layeredPane.add(volume);
JLabel label_2 = new JLabel("Compl:");
label_2.setFont(new Font("SansSerif", Font.BOLD, 23));
label_2.setBounds(16, 194, 95, 26);
layeredPane.add(label_2);
final JComboBox complemento = new JComboBox();
complemento.setFont(new Font("SansSerif", Font.PLAIN, 20));
complemento.setEnabled(false);
complemento.setBounds(102, 193, 185, 30);
layeredPane.add(complemento);
JLabel label_3 = new JLabel("Quant:");
label_3.setFont(new Font("SansSerif", Font.BOLD, 23));
label_3.setBounds(298, 187, 86, 41);
layeredPane.add(label_3);
quantidade = new JTextField();
quantidade.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent arg0) {
char ch = arg0.getKeyChar();
try{
Integer.parseInt(ch+"");
}catch (NumberFormatException ex){
arg0.consume();
}
}
});
quantidade.setFont(new Font("SansSerif", Font.PLAIN, 20));
quantidade.setColumns(10);
quantidade.setBounds(387, 194, 122, 28);
layeredPane.add(quantidade);
JButton btnInserir = new JButton("Adicionar");
btnInserir.setFont(new Font("SansSerif", Font.BOLD, 25));
btnInserir.setBounds(184, 264, 152, 45);
layeredPane.add(btnInserir);
JLayeredPane layeredPane_1 = new JLayeredPane();
layeredPane_1.setBorder(new TitledBorder(null, "\u00CDTENS DO OR\u00C7AMENTO", TitledBorder.CENTER, TitledBorder.ABOVE_TOP, null, null));
layeredPane_1.setBounds(576, 53, 695, 184);
painelCentral.add(layeredPane_1);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(6, 20, 683, 158);
layeredPane_1.add(scrollPane);
table = new JTable();
table.setFillsViewportHeight(true);
table.setFont(new Font("SansSerif", Font.BOLD, 16));
table.setModel(new DefaultTableModel(
new Object[][] {
},
new String[] {
"ID", "\u00CDTEM", "QUANTIDADE"
}
));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.getColumnModel().getColumn(0).setPreferredWidth(50);
table.getColumnModel().getColumn(1).setPreferredWidth(492);
table.getColumnModel().getColumn(2).setPreferredWidth(120);
scrollPane.setViewportView(table);
JLayeredPane layeredPane_2 = new JLayeredPane();
layeredPane_2.setBorder(new TitledBorder(null, "Altera\u00E7\u00F5es no pedido", TitledBorder.LEADING, TitledBorder.ABOVE_TOP, null, null));
layeredPane_2.setBounds(576, 246, 695, 134);
painelCentral.add(layeredPane_2);
JButton processa = new JButton("Processa");
processa.setFont(new Font("SansSerif", Font.BOLD, 25));
processa.setBounds(446, 50, 185, 45);
layeredPane_2.add(processa);
idPedido = new JTextField();
idPedido.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char ch = e.getKeyChar();
try{
Integer.parseInt(ch+"");
}catch (NumberFormatException ex){
e.consume();
}
}
});
idPedido.setFont(new Font("SansSerif", Font.PLAIN, 20));
idPedido.setColumns(10);
idPedido.setBounds(292, 60, 122, 28);
layeredPane_2.add(idPedido);
JLabel label_4 = new JLabel("Escolha o ID:");
label_4.setFont(new Font("SansSerif", Font.BOLD, 23));
label_4.setBounds(126, 56, 161, 35);
layeredPane_2.add(label_4);
qtdAlterar = new JTextField();
qtdAlterar.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char ch = e.getKeyChar();
try{
Integer.parseInt(ch+"");
}catch (NumberFormatException ex){
e.consume();
}
}
});
qtdAlterar.setFont(new Font("SansSerif", Font.PLAIN, 20));
qtdAlterar.setColumns(10);
qtdAlterar.setBounds(292, 88, 122, 28);
layeredPane_2.add(qtdAlterar);
JLabel label_5 = new JLabel("Escolha a quantidade:");
label_5.setFont(new Font("SansSerif", Font.BOLD, 23));
label_5.setBounds(26, 87, 263, 28);
layeredPane_2.add(label_5);
final JRadioButton alterarQuantidade = new JRadioButton("Alterar quantidade");
alterarQuantidade.setSelected(true);
alterarQuantidade.setFont(new Font("SansSerif", Font.BOLD | Font.ITALIC, 14));
alterarQuantidade.setBounds(75, 26, 161, 18);
layeredPane_2.add(alterarQuantidade);
final JRadioButton excluirItem = new JRadioButton("Excluir \u00EDtem do pedido");
excluirItem.setFont(new Font("SansSerif", Font.BOLD | Font.ITALIC, 14));
excluirItem.setBounds(360, 27, 185, 18);
layeredPane_2.add(excluirItem);
JLabel lblNewLabel = new JLabel("ALTERA\u00C7\u00C3O DE OR\u00C7AMENTOS");
lblNewLabel.setFont(new Font("SansSerif", Font.BOLD, 32));
lblNewLabel.setBounds(458, 11, 549, 53);
janela.add(lblNewLabel);
JButton finalizar = new JButton("FINALIZAR");
finalizar.setFont(new Font("SansSerif", Font.BOLD, 30));
finalizar.setBounds(399, 492, 184, 57);
janela.add(finalizar);
JButton cancelar = new JButton("CANCELAR");
cancelar.setFont(new Font("SansSerif", Font.BOLD, 30));
cancelar.setBounds(608, 492, 209, 57);
janela.add(cancelar);
orcamento.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
limpaArray();
String escolha = String.valueOf(orcamento.getSelectedItem());
if(escolha != "Selecione"){
//JOptionPane.showMessageDialog(null, escolha);
pedidoEscolhido = escolha.substring(0, 5);
sql = "SELECT liv.tipo, liv.idlivro, liv.volume, liv.lingua, mo.valor_mo, mo.quant, mo.id_preco, liv.nome," +
" liv.num_tipo FROM movim mo INNER JOIN livros liv ON mo.id_livro = liv.idlivro " +
"WHERE mo.id_pedido ="+pedidoEscolhido+" ORDER BY liv.lingua, liv.num_tipo, liv.volume";
rs = ConsultaBanco(sql);
int idLivro = 0, quantidade, volume, idPreco, numTipo;
float valor;
String idioma, item = null, nome = null;
Livro livro = null;
try {
while(rs.next()){
idLivro = rs.getInt(2);
quantidade = rs.getInt(5);
volume = rs.getInt(3);
idPreco = rs.getInt(7);
valor = rs.getFloat(5);
idioma = rs.getString(4);
item = rs.getString(1);
nome = rs.getString(8);
numTipo = rs.getInt(9);
if(numTipo <= 4){
//Obra, Réplica, Tréplica, Histórico
livro = new Livro(idLivro, quantidade, volume, valor, 0/*idPreço*/, idioma, item, ""/*nome*/);
}else if(numTipo == 6){
//Cavaleiro
}else if(numTipo == 5 || numTipo == 7){
//Amarelo, Prospécto
livro = new Livro(idLivro, quantidade, volume, valor, 0, idioma, item, nome);
}
pedidoNew.add(livro);
}
} catch (SQLException e) {
e.printStackTrace();
}
sql = "SELECT valor_mo, quant, id_preco FROM movim WHERE id_preco > 8 AND id_pedido = "+pedidoEscolhido;
rs = ConsultaBanco(sql);
try {
while(rs.next()){
idPreco = rs.getInt(3);
quantidade = rs.getInt(2);
volume = 0;
valor = rs.getFloat(1);
idioma = "";
switch(idPreco){
case 9:
idLivro = 99999;
nome = "B";
item = "B";
break;
case 10:
idLivro = 99998;
nome = "D";
item = "D";
break;
case 11:
idLivro = 99997;
nome = "F";
item = "F";
break;
}
livro = new Livro(idLivro, quantidade, volume, valor, idPreco, idioma, item, nome);
pedidoNew.add(livro);
}
} catch (SQLException e) {
e.printStackTrace();
}
pedidoOld.addAll(pedidoNew);
orcamento.setEnabled(false);
alteraTableVisual();
}
}
});
cancelar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
cancela();
}
});
btnInserir.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String orcamentoSelecionado = String.valueOf(orcamento.getSelectedItem());
if(orcamentoSelecionado == "Selecione"){
JOptionPane.showMessageDialog(null, "Escolha um pedido antes de continuar");
orcamento.requestFocus();
}else{
//inserir o resto do codigo de inserção do ítem
String escolha = String.valueOf(item.getSelectedItem());
String completa = String.valueOf(complemento.getSelectedItem());
int aprovado = 1;
int vol, qtd;
lblQuantidadeMximaPermitida.setVisible(false);
switch (escolha){
case "Selecione":
JOptionPane.showMessageDialog(null, "Escolha um ítem antes de continuar!");
aprovado = 0;
break;
case "Obra":
case "Réplica":
case "Tréplica":
try{
vol = Integer.parseInt(volume.getText());
if(! (vol >=1 && vol <=21)){
JOptionPane.showMessageDialog(null, "O volume deve ser compreendido entre 1 e 21");
volume.setText(null);
volume.requestFocus();
aprovado = 0;
}
}catch(Exception e2){
JOptionPane.showMessageDialog(null, "O volume não pode estar vazio");
volume.requestFocus();
aprovado = 0;
}
break;
case "Histórico":
try{
vol = Integer.parseInt(volume.getText());
if(! (vol >=1 && vol <=943)){
JOptionPane.showMessageDialog(null, "O volume deve ser compreendido entre 1 e 943");
volume.setText(null);
volume.requestFocus();
aprovado = 0;
}
}catch(Exception e2){
JOptionPane.showMessageDialog(null, "O volume não pode estar vazio");
volume.requestFocus();
aprovado = 0;
}
break;
case "Amarelo":
case "Prospécto":
if(completa == "Selecione"){
JOptionPane.showMessageDialog(null, "Escolha um ítem do complemento");
complemento.requestFocus();
aprovado = 0;
}
break;
default:
aprovado = 1;
break;
}
if(aprovado == 1){
int livro = 0;
try{
qtd = Integer.parseInt(quantidade.getText());
if(qtd <= 0){
JOptionPane.showMessageDialog(null, "A quantidade tem que ser maior do que zero");
quantidade.setText(null);
quantidade.requestFocus();
}else{
idiomaSolicitado = String.valueOf(idioma.getSelectedItem());
String nome = "";
switch(escolha){
case "B":
sql = "SELECT valor FROM tb_precos WHERE id_tab_preco = 9";
idTabelaLivro = 99999;
idTabelaPreco = 9;
break;
case "D":
sql = "SELECT valor FROM tb_precos WHERE id_tab_preco = 10";
idTabelaLivro = 99998;
idTabelaPreco = 10;
break;
case "F":
sql = "SELECT valor FROM tb_precos WHERE id_tab_preco = 11";
idTabelaLivro = 99997;
idTabelaPreco = 11;
break;
case "Cavaleiro":
sql = "SELECT preco.valor, liv.quantidade, liv.idlivro, liv.nome FROM tb_precos preco " +
"INNER JOIN livros liv ON liv.num_tipo = preco.num_tipo " +
"WHERE liv.num_tipo = 6 AND liv.lingua = '"+idiomaSolicitado+"' AND liv.inativo = '0' ";
livro = 1;
idTabelaPreco = 7;
volumeSolicitado = 0;
break;
case "Obra":
volumeSolicitado = Integer.parseInt(volume.getText());
sql = "SELECT preco.valor, liv.quantidade, liv.idlivro, liv.nome FROM tb_precos preco " +
"INNER JOIN livros liv ON liv.num_tipo = preco.num_tipo " +
"WHERE liv.num_tipo = 1 AND liv.lingua = '"+idiomaSolicitado+"' AND liv.inativo = '0' " +
"AND liv.volume = '"+volumeSolicitado+"'";
livro = 1;
idTabelaPreco = 1;
break;
case "Réplica":
volumeSolicitado = Integer.parseInt(volume.getText());
sql = "SELECT preco.valor, liv.quantidade, liv.idlivro, liv.nome FROM tb_precos preco " +
"INNER JOIN livros liv ON liv.num_tipo = preco.num_tipo " +
"WHERE liv.num_tipo = 2 AND liv.lingua = '"+idiomaSolicitado+"' AND liv.inativo = '0' " +
"AND liv.volume = '"+volumeSolicitado+"'";
livro = 1;
idTabelaPreco = 2;
break;
case "Tréplica":
volumeSolicitado = Integer.parseInt(volume.getText());
sql = "SELECT preco.valor, liv.quantidade, liv.idlivro, liv.nome FROM tb_precos preco " +
"INNER JOIN livros liv ON liv.num_tipo = preco.num_tipo " +
"WHERE liv.num_tipo = 3 AND liv.lingua = '"+idiomaSolicitado+"' AND liv.inativo = '0' " +
"AND liv.volume = '"+volumeSolicitado+"'";
livro = 1;
idTabelaPreco = 3;
break;
case "Histórico":
volumeSolicitado = Integer.parseInt(volume.getText());
if(volumeSolicitado <= 355){
sql = "SELECT preco.valor, liv.quantidade, liv.idlivro, liv.nome FROM tb_precos preco " +
"INNER JOIN livros liv ON liv.num_tipo = preco.num_tipo " +
"WHERE liv.num_tipo = 4 AND liv.lingua = '"+idiomaSolicitado+"' AND liv.inativo = '0' " +
"AND liv.volume = '"+volumeSolicitado+"' AND preco.id_tab_preco = 4";
idTabelaPreco = 4;
}else{
sql = "SELECT preco.valor, liv.quantidade, liv.idlivro, liv.nome FROM tb_precos preco " +
"INNER JOIN livros liv ON liv.num_tipo = preco.num_tipo " +
"WHERE liv.num_tipo = 4 AND liv.lingua = '"+idiomaSolicitado+"' AND liv.inativo = '0' " +
"AND liv.volume = '"+volumeSolicitado+"' AND preco.id_tab_preco = 5";
idTabelaPreco = 5;
}
livro = 1;
break;
case "Prospécto":
sql = "SELECT preco.valor, liv.quantidade, liv.idlivro, liv.nome FROM tb_precos preco "+
"INNER JOIN livros liv ON liv.num_tipo = preco.num_tipo " +
"WHERE liv.num_tipo = 7 AND liv.lingua = '"+idiomaSolicitado+"' AND liv.inativo = 0 "+
"AND liv.nome = '"+completa+"' AND preco.id_tab_preco = 8";
idTabelaPreco = 8;
livro = 1;
volumeSolicitado = 0;
break;
case "Amarelo":
sql = "SELECT preco.valor, liv.quantidade, liv.idlivro, liv.nome FROM tb_precos preco "+
"INNER JOIN livros liv ON liv.num_tipo = preco.num_tipo " +
"WHERE liv.num_tipo = 5 AND liv.lingua = '"+idiomaSolicitado+"' AND liv.inativo = 0 "+
"AND liv.nome = '"+completa+"' AND preco.id_tab_preco = 6";
idTabelaPreco = 6;
livro = 1;
volumeSolicitado = 0;
break;
}
rs = ConsultaBanco(sql);
String nomeLivro = "";
try{
while(rs.next()){
valorLivro = rs.getFloat(1);
estoque = rs.getInt(2);
idTabelaLivro = rs.getInt(3);
nomeLivro = rs.getString(4);
}
}catch(SQLException e2){
e2.printStackTrace();
}
if (livro == 1){
lblQuantidadeMximaPermitida.setText("Quantidade máxima permitida: "+estoque);
if(estoque < qtd){
lblQuantidadeMximaPermitida.setVisible(true);
}else{
//aki vou verificar se existe o item e posteriormente inserir o ítem no objeto "SOLICITAÇÃO caso ja não exista"
boolean existe = false;
for (Livro p : pedidoNew) {
if(p.getID() == idTabelaLivro){
existe = true;
}
}
if(existe == false){
Livro novoLivro = new Livro(idTabelaLivro, qtd, volumeSolicitado, valorLivro, idTabelaPreco ,idioma.getSelectedItem().toString(), item.getSelectedItem().toString(), nomeLivro);
pedidoNew.add(novoLivro);
alteraTableVisual();
teveAlteracao = true;
int estoqNew = estoque - qtd;
sql = "UPDATE livros SET quantidade = '"+estoqNew+"' WHERE idlivro = "+idTabelaLivro;
GravaBanco(sql);
}else{
JOptionPane.showMessageDialog(null, "Este ítem já foi inserido no pedido, favor escolher outro");
}
}
}else{
//se for banho fumo ou defumador
boolean existe = false;
for (Livro p : pedidoNew) {
if(p.getID() == idTabelaLivro){
existe = true;
}
}
if(existe == false){
rs = ConsultaBanco(sql);
try{
while(rs.next()){
valorLivro = rs.getFloat(1);
}
}catch(SQLException e2){
e2.printStackTrace();
}
Livro novoLivro = new Livro(idTabelaLivro, qtd, 0, valorLivro, idTabelaPreco, "", item.getSelectedItem().toString(), "");
pedidoNew.add(novoLivro);
alteraTableVisual();
teveAlteracao = true;
}else{
JOptionPane.showMessageDialog(null, "Este ítem já foi inserido no pedido, favor escolher outro");
}
}
}
}catch(Exception e2){
e2.getStackTrace();
quantidade.setText(null);
JOptionPane.showMessageDialog(null, "A quantidade não pode estar vazia");
quantidade.requestFocus();
}
}
}
}
});
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
quantidade.setText(null);
String escolha = String.valueOf(item.getSelectedItem());
lblQuantidadeMximaPermitida.setVisible(false);
switch(escolha){
case "Amarelo":
volume.setText(null);
volume.setEnabled(false);
complemento.setEnabled(true);
complemento.removeAllItems();
complemento.addItem("Selecione");
complemento.addItem("AMARELÃO - MJC");
complemento.addItem("FININHO");
complemento.addItem("ORELHÃO - RS");
complemento.requestFocus();
break;
case "Prospécto":
volume.setText(null);
volume.setEnabled(false);
complemento.setEnabled(true);
complemento.removeAllItems();
complemento.addItem("Selecione");
complemento.addItem("CR");
complemento.addItem("CV");
complemento.requestFocus();
break;
case "Obra":
case "Réplica":
case "Tréplica":
case "Histórico":
volume.setText(null);
volume.setEnabled(true);
volume.requestFocus();
complemento.removeAllItems();
complemento.addItem("Selecione");
complemento.setEnabled(false);
break;
default:
volume.setText(null);
volume.setEnabled(false);
complemento.removeAllItems();
complemento.addItem("Selecione");
complemento.setEnabled(false);
break;
}
}
});
alterarQuantidade.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
excluirItem.setSelected(false);
alterarQuantidade.setSelected(true);
qtdAlterar.setEnabled(true);
qtdAlterar.setText(null);
}
});
excluirItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
alterarQuantidade.setSelected(false);
excluirItem.setSelected(true);
qtdAlterar.setEnabled(false);
qtdAlterar.setText(null);
}
});
processa.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
int id = (Integer.parseInt(idPedido.getText()))-1;
int teste;
try{
teste = pedidoNew.get(id).getQuantidade();//testando se o id existe e pegando a quantidade caso seja selecionada
int idBanco = pedidoNew.get(id).getID();
if(alterarQuantidade.isSelected() == true){
//fazer quando tiver marcado a alteração de quantidade
int valorNovo = Integer.parseInt(qtdAlterar.getText());
if(valorNovo <= 0){
JOptionPane.showMessageDialog(null, "O valor digitado deve ser maior do que zero");
qtdAlterar.setText(null);
qtdAlterar.requestFocus();
}else{
if(idBanco >= 9997){
pedidoNew.get(id).setQuantidade(valorNovo);
alteraTableVisual();
idPedido.setText(null);
qtdAlterar.setText(null);
idPedido.requestFocus();
teveAlteracao = true;
}else{
int diferenca, estoque = 0;
sql = "SELECT quantidade FROM livros WHERE idlivro = "+idBanco;
rs = ConsultaBanco(sql);
try{
while(rs.next()){
estoque = rs.getInt(1);
}
}catch (SQLException e2) {
e2.printStackTrace();
}
if(valorNovo < teste){
diferenca = teste - valorNovo;
estoque = estoque + diferenca;
sql = "UPDATE livros SET quantidade = '"+estoque+"' WHERE idlivro = "+idBanco;
GravaBanco(sql);
pedidoNew.get(id).setQuantidade(valorNovo);
alteraTableVisual();
idPedido.setText(null);
qtdAlterar.setText(null);
idPedido.requestFocus();
teveAlteracao = true;
}else if(valorNovo > teste){
diferenca = valorNovo - teste;
if(estoque >= diferenca){
estoque = estoque - diferenca;
sql = "UPDATE livros SET quantidade = '"+estoque+"' WHERE idlivro = "+idBanco;
GravaBanco(sql);
pedidoNew.get(id).setQuantidade(valorNovo);
alteraTableVisual();
idPedido.setText(null);
qtdAlterar.setText(null);
idPedido.requestFocus();
teveAlteracao = true;
}else{
diferenca = estoque + teste;
JOptionPane.showMessageDialog(null, "O limite para aumentar o ítem no momento é de "+diferenca+" livros" );
qtdAlterar.setText(null);
qtdAlterar.requestFocus();
}
}
}
}
}else{
//fazer quando tiver marcado a exclusão de ítem
int estoq = 0;
sql = "SELECT quantidade FROM livros WHERE idlivro = "+idBanco;
rs = ConsultaBanco(sql);
try{
while(rs.next()){
estoq = rs.getInt(1);
}
}catch (SQLException e2) {
e2.printStackTrace();
}
estoq = estoq + teste;
sql = "UPDATE livros SET quantidade = '"+estoq+"' WHERE idlivro = "+idBanco;
GravaBanco(sql);
pedidoNew.remove(id);
alteraTableVisual();
idPedido.setText(null);
teveAlteracao = true;
}
}catch(Exception e){
JOptionPane.showMessageDialog(null,"O ID selecionado não existe");
idPedido.setText(null);
qtdAlterar.setText(null);
idPedido.requestFocus();
}
}
});
}
}
como podem ver eu altero apenas a quantidade do pedidoNew nas linhas 884 e 896, mas quando isso ocorre o sistema também altera a quantidade no pedidoOld
Porque isso acontece e como solucionar meu problema?