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();
}