[RESOLVIDO] JList com mouseEvent bugando

Olá, estou com um problema o qual não consigo resolver, espero que vocês me ajudem. tenho um cadastro de entidades em perfeito funcionamento, mas o view do crud é feito em um Jlist, o qual tem um mouseEvent que transfere os dados do Jlist (que utiliza também DefaultListModel) para os campos respectivos.

O problema é o seguinte: quando inicia o programa, eu posso clicar quantas vezes eu quiser no JList que o próprio irá transferir os dados para os campos, mas quando eu faço uma alteração (e eu uso o DefaultListModel justamente para isso) o mouseEvent simplesmente não aceita, segue a GUI que contém o código e a mensagem de erro:

OBS: observe que para os botões “Add, Alt e Rem” eu coloquei um código no final que atualiza a lista, eu tentei mexer nele, mas não obtive sucesso, considerem que as outras classes estão em perfeito funcionamento


import Controla.ControlaDsr;
import Entidades.Dsr;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import static javax.swing.WindowConstants.DISPOSE_ON_CLOSE;
import javax.swing.text.MaskFormatter;

public class CadastraDSR extends JDialog {

    DefaultListModel jlModel = new DefaultListModel();

    ControlaDsr cDsr = new ControlaDsr();
    List<Dsr> lDsr = cDsr.getListaDsr();

    String[] teste = cDsr.getJList(lDsr).split("-");

    Font f = new Font("Courier New", Font.BOLD, 10);

    JList jlDsr = new JList(teste);

    JScrollPane scJl = new JScrollPane(jlDsr);

    JFormattedTextField tfDat;
    JTextField tfDiasN = new JTextField(10);
    JTextField tfNDiasN = new JTextField(10);
    JTextField tfDiasS = new JTextField(10);
    JTextField tfNDiasS = new JTextField(10);

    MaskFormatter mfDat;

    JPanel pnC = new JPanel();
    JPanel pnCL1 = new JPanel();
    JPanel pnCL1C2 = new JPanel();
    JPanel pnCL1C2C1 = new JPanel();
    JPanel pnCL1C2C2 = new JPanel();
    JPanel pnCL2 = new JPanel();
    JPanel pnCL2C1 = new JPanel();
    JPanel pnCL2C1L1 = new JPanel();
    JPanel pnCL2C1L1C1 = new JPanel();
    JPanel pnCL2C1L1C2 = new JPanel();
    JPanel pnCL2C1L2 = new JPanel();
    JPanel pnCL2C1L2C1 = new JPanel();
    JPanel pnCL2C1L2C2 = new JPanel();
    JPanel pnCL2C2 = new JPanel();
    JPanel pnCL2C2L1 = new JPanel();
    JPanel pnCL2C2L1C1 = new JPanel();
    JPanel pnCL2C2L1C2 = new JPanel();
    JPanel pnCL2C2L2 = new JPanel();
    JPanel pnCL2C2L2C1 = new JPanel();
    JPanel pnCL2C2L2C2 = new JPanel();
    JPanel pnS = new JPanel();
    JPanel pnSC1 = new JPanel();
    JPanel pnSC2 = new JPanel();
    JPanel pnSC3 = new JPanel();
    JPanel pnSC4 = new JPanel();

    JButton btAdd = new JButton("Adicionar");
    JButton btAlt = new JButton("Alterar");
    JButton btRem = new JButton("Remover");
    JButton btCanc = new JButton("Cancelar");

    Container cp;

    public CadastraDSR() {
        try {
            mfDat = new MaskFormatter("**/****");
            mfDat.setValidCharacters("0123456789");
        } catch (Exception E) {
            E.printStackTrace();
        }

        tfDat = new JFormattedTextField(mfDat);
        tfDat.setColumns(6);

        jlDsr.setFont(f);
        jlDsr.setModel(jlModel);

        setModal(true);
        cp = getContentPane();
        cp.setLayout(new BorderLayout());
        setSize(975, 200);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setTitle("Cadastro de DSR");

        pnC.setLayout(new BorderLayout());
        pnCL1.setLayout(new FlowLayout(FlowLayout.CENTER));
        pnCL1C2.setLayout(new GridLayout(1, 2));
        pnCL1C2C1.setLayout(new FlowLayout(FlowLayout.RIGHT));
        pnCL1C2C2.setLayout(new FlowLayout(FlowLayout.LEFT));
        pnCL2.setLayout(new GridLayout(1, 2));
        pnCL2C1.setLayout(new GridLayout(2, 1));
        pnCL2C1L1.setLayout(new GridLayout(1, 2));
        pnCL2C1L1C1.setLayout(new FlowLayout(FlowLayout.RIGHT));
        pnCL2C1L1C2.setLayout(new FlowLayout(FlowLayout.LEFT));
        pnCL2C1L2.setLayout(new GridLayout(1, 2));
        pnCL2C1L2C1.setLayout(new FlowLayout(FlowLayout.RIGHT));
        pnCL2C1L2C2.setLayout(new FlowLayout(FlowLayout.LEFT));
        pnCL2C2.setLayout(new GridLayout(2, 1));
        pnCL2C2L1.setLayout(new GridLayout(1, 2));
        pnCL2C2L1C1.setLayout(new FlowLayout(FlowLayout.RIGHT));
        pnCL2C2L1C2.setLayout(new FlowLayout(FlowLayout.LEFT));
        pnCL2C2L2.setLayout(new GridLayout(1, 2));
        pnCL2C2L2C1.setLayout(new FlowLayout(FlowLayout.RIGHT));
        pnCL2C2L2C2.setLayout(new FlowLayout(FlowLayout.LEFT));

        pnCL2C1.setBorder(BorderFactory.createTitledBorder("DSR"));
        pnCL2C2.setBorder(BorderFactory.createTitledBorder("DSR Bancário"));

        pnCL1C2C1.add(new JLabel("Data (mm/aaaa):  "));
        pnCL1C2C2.add(tfDat);

        pnCL1C2.add(pnCL1C2C1);
        pnCL1C2.add(pnCL1C2C2);

        pnCL1.add(pnCL1C2);

        pnCL2C1L1C1.add(new JLabel("Dias úteis:  "));
        pnCL2C1L1C2.add(tfDiasS);

        pnCL2C1L1.add(pnCL2C1L1C1);
        pnCL2C1L1.add(pnCL2C1L1C2);

        pnCL2C1L2C1.add(new JLabel("Dias não úteis:  "));
        pnCL2C1L2C2.add(tfDiasN);

        pnCL2C1L2.add(pnCL2C1L2C1);
        pnCL2C1L2.add(pnCL2C1L2C2);

        pnCL2C1.add(pnCL2C1L1);
        pnCL2C1.add(pnCL2C1L2);

        pnCL2C2L1C1.add(new JLabel("Dias úteis:  "));
        pnCL2C2L1C2.add(tfNDiasS);

        pnCL2C2L1.add(pnCL2C2L1C1);
        pnCL2C2L1.add(pnCL2C2L1C2);

        pnCL2C2L2C1.add(new JLabel("Dias não úteis:  "));
        pnCL2C2L2C2.add(tfNDiasN);

        pnCL2C2L2.add(pnCL2C2L2C1);
        pnCL2C2L2.add(pnCL2C2L2C2);

        pnCL2C2.add(pnCL2C2L1);
        pnCL2C2.add(pnCL2C2L2);

        pnCL2.add(pnCL2C1);
        pnCL2.add(pnCL2C2);

        pnC.add(pnCL1, BorderLayout.NORTH);
        pnC.add(pnCL2, BorderLayout.CENTER);

        pnSC1.add(btAdd);
        pnSC2.add(btAlt);
        pnSC3.add(btRem);
        pnSC4.add(btCanc);

        pnS.add(pnSC1);
        pnS.add(pnSC2);
        pnS.add(pnSC3);
        pnS.add(pnSC4);

        cp.add(pnC, BorderLayout.WEST);
        cp.add(scJl, BorderLayout.CENTER);
        cp.add(pnS, BorderLayout.SOUTH);

        for (String c : teste) {
            jlModel.addElement(c);
        }

        btAdd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
                Dsr dsr = new Dsr();
                dsr.setIdDsr(Integer.parseInt(cDsr.getIdDsr()));
                try {
                    dsr.setDataDsr(sdf.parse("01/" + tfDat.getText()));
                } catch (Exception E) {
                    E.printStackTrace();
                    JOptionPane.showMessageDialog(null, "Não foi possível cadastrar sua DSR, erro na data");
                }
                dsr.setUteisDsr(tfDiasS.getText());
                dsr.setNaouteisDsr(tfDiasN.getText());
                dsr.setBancUteisDsr(tfNDiasS.getText());
                dsr.setBancNUteisDsr(tfNDiasN.getText());
                if (cDsr.cadastraDsr(dsr)) {
                    JOptionPane.showMessageDialog(null, "DSR Cadastrada com sucesso!");
                } else {
                    JOptionPane.showMessageDialog(null, "Não foi possível cadastrar tal DSR");
                }
                lDsr = cDsr.getListaDsr();
                teste = cDsr.getJList(lDsr).split("-");
                jlModel.removeAllElements();
                for (String c : teste) {
                    jlModel.addElement(c);
                }
                jlDsr.removeAll();
                jlDsr = new JList(jlModel);
            }
        });

        btAlt.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
                    Dsr dsr = new Dsr();
                    dsr.setIdDsr(cDsr.getIdDsr("01/" + tfDat.getText()));
                    dsr.setDataDsr(sdf.parse("01/" + tfDat.getText()));

                    dsr.setUteisDsr(tfDiasS.getText());
                    dsr.setNaouteisDsr(tfDiasN.getText());
                    dsr.setBancUteisDsr(tfNDiasS.getText());
                    dsr.setBancNUteisDsr(tfNDiasN.getText());
                    if (cDsr.atualDsr(dsr)) {
                        JOptionPane.showMessageDialog(null, "DSR Atualizada com sucesso!");
                    } else {
                        JOptionPane.showMessageDialog(null, "Não foi possível atualizar tal DSR");
                    }
                } catch (Exception E) {
                    JOptionPane.showMessageDialog(null, "Não foi possível atualizar tal DSR");
                    E.printStackTrace();
                }
                lDsr = cDsr.getListaDsr();
                teste = cDsr.getJList(lDsr).split("-");
                jlModel.removeAllElements();
                for (String c : teste) {
                    jlModel.addElement(c);
                }
                jlDsr.removeAll();
                jlDsr = new JList(jlModel);
            }
        });

        btRem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
                Dsr dsr = new Dsr();
                dsr.setIdDsr(cDsr.getIdDsr("01/" + tfDat.getText()));
                try {
                    dsr.setDataDsr(sdf.parse("01/" + tfDat.getText()));
                } catch (Exception E) {
                    E.printStackTrace();
                    JOptionPane.showMessageDialog(null, "A data passada está com algum problema");
                }
                dsr.setUteisDsr(tfDiasS.getText());
                dsr.setNaouteisDsr(tfDiasN.getText());
                dsr.setBancUteisDsr(tfNDiasS.getText());
                dsr.setBancNUteisDsr(tfNDiasN.getText());
                if (cDsr.removeDsr(dsr)) {
                    JOptionPane.showMessageDialog(null, "DSR Removida com sucesso!");
                } else {
                    JOptionPane.showMessageDialog(null, "Não foi possível Remover tal DSR");
                }
                lDsr = cDsr.getListaDsr();
                teste = cDsr.getJList(lDsr).split("-");
                jlModel.removeAllElements();
                for (String c : teste) {
                    jlModel.addElement(c);
                }
                jlDsr = new JList(jlModel);
            }
        });

        jlDsr.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) {//2 clique
                    String campo = (String) jlModel.getElementAt(jlDsr.getSelectedIndex());
                    String[] campos = campo.replace("|", "-").split("-");
                    tfDat.setText(campos[0].substring(3, 10).replace("/", "").trim());
                    tfDat.repaint();
                    tfDiasS.setText(campos[1].trim());
                    tfDiasN.setText(campos[2].trim());
                    tfNDiasS.setText(campos[3].trim());
                    tfNDiasN.setText(campos[4].trim());
                }
            }
        });

        setLocationRelativeTo(null);
        setVisible(true);
    }
}

Erro:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
	at java.util.Vector.elementData(Vector.java:734)
	at java.util.Vector.elementAt(Vector.java:477)
	at javax.swing.DefaultListModel.getElementAt(DefaultListModel.java:89)
	at Cadastra.CadastraDSR$4.mouseClicked(CadastraDSR.java:293)
	at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
	at java.awt.Component.processMouseEvent(Component.java:6538)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
	at java.awt.Component.processEvent(Component.java:6300)
	at java.awt.Container.processEvent(Container.java:2236)

Segue também alguns códigos que eu utilizo:
Esses estão Modularizados no controlaDsr

public String getJList(List<Dsr> dsr){
        String valor="Data      |Dias Úteis  |Dias não Úteis   |Dias Úteis(Banc)   |Dias não Úteis(Banc) -";
        String dat="";
        for(Dsr dd:dsr){
            dat=String.valueOf(dd.getDataDsr());
            valor+=stT.ajustaLargura(getDat(dat),10)+"|";
            valor+=stT.ajustaLargura(dd.getUteisDsr(),12)+"|";
            valor+=stT.ajustaLargura(dd.getNaouteisDsr(),17)+"|";
            valor+=stT.ajustaLargura(dd.getBancUteisDsr(), 19)+"|";
            valor+=stT.ajustaLargura(dd.getBancNUteisDsr(),21)+"-";
        }
        
        return valor;
    }

public List<Dsr> getListaDsr(){
        try{
            List<Dsr> list=DAODsr.listInOrderId();
            return list;
        }
        catch(Exception E){
            E.printStackTrace();
            return null;
        }
    }

public String getDat(String dat){
        String str="";
        str+=dat.substring(8,10);
        str+="/";
        str+=getMes(dat.substring(4,7));
        str+="/";
        if(getMes(dat.substring(4,7)).equals("11")){
            str+=dat.substring(25,29);
        }
        else if(getMes(dat.substring(4,7)).equals("12")){
            str+=dat.substring(25,29);
        }
        else if(getMes(dat.substring(4,7)).equals("01")){
            str+=dat.substring(25,29);
        }
        else if(getMes(dat.substring(4,7)).equals("02")){
            str+=dat.substring(25,29);
        }
        else{
            str+=dat.substring(24,28);
        }
        return str.trim();
    }

O problema deve ser onde está isto aí:

                jlModel.removeAllElements();
                for (String c : teste) {
                    jlModel.addElement(c);
                }
                jlDsr = new JList(jlModel);

e

            jlModel.removeAllElements();
            for (String c : teste) {
                jlModel.addElement(c);
            }
            jlDsr.removeAll();
            jlDsr = new JList(jlModel);
  1. não sei o que jlDsr.removeAll(); faz, provavelmente não deveria estar aí
  2. vc cria um novo component jlDsr = new JList(jlModel); e em nenhum momento vc adiciona para exibir na tela, provavelmente é outra linha inútil q não deveria estar aí

O JList é um component swing, como um JLabel, Jtextfield, …, não é uma lista. O ListModel é um model para o JList, models em java são estruturas(modelos) de dados, é a forma de como os dados são armazenados, essa é a lista.

O java.lang.ArrayIndexOutOfBoundsException: -1 acontece pq não existe item selecionado no JList armazenado no jlDsr, mas sim no JList q está sendo exibido, tudo por causa q vc substituiu onde está jlDsr = new JList(jlModel);.

Acredito q substituindo por isso resolverá

                jlModel.removeAllElements();
                for (String c : teste) {
                    jlModel.addElement(c);
                }
                jlDsr.repaint(); // Avisa o JList q o model foi atualizado

CARA VC É UM DEUS vlw man <3