Olá , boa Tarde.
Sou novo aqui e iniciante em JAVA.
Estou com o seguinte problema no meu sistema:
Eu tenho uma tela de cadastro de Produção,e nessa tela tenho um ComboBox que carrega todos os itens da matéria - prima, mas quando eu vou selecionar um Item, ele me diz " Não foi possível preencher MeuCampoDBComboBox ".
ComboBox:
package componente;
import java.util.List;
import javax.swing.JComboBox;
public class MeuCampoComboBox extends JComboBox implements MeuComponente {
private boolean obrigatorio; private String nome; private String[][] dados; private boolean podeHabilitar;
public MeuCampoComboBox(boolean obrigatorio,boolean podeHabilitar, String[][] dados, String nome) { this.obrigatorio = obrigatorio; this.dados = dados; this.nome = nome; this.podeHabilitar = podeHabilitar; preencher(); }
public void preencher() { removeAllItems(); for (int i = 0; i < dados.length; i++) { addItem(dados[i][1]); } }
@Override public boolean eObrigatorio() { return obrigatorio; }
@Override public boolean eValido() { return true; }
@Override public boolean eVazio() { return getSelectedIndex() < 0; }
@Override public void limpar() { setSelectedIndex(-1); }
@Override public void habilitar(boolean status) { setEnabled(podeHabilitar && status); }
@Override public Object getValor() { if (getSelectedIndex() == -1) { return ""; } else { return dados[getSelectedIndex()][0]; } }
@Override public void setValor(Object valor) { for (int i = 0; i < dados.length; i++) { if (dados[i][0].equals((String) valor)) { setSelectedIndex(i); return; } } setSelectedIndex(-1); }
@Override public String getNome() { return nome; }
}
DBComboBox:
package componente;
import banco.Conexao;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.ItemListener;
import java.lang.reflect.Method;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class MeuCampoDBComboBox extends JPanel implements MeuComponente {
private JComboBox jcb = new JComboBox();
private JButton jb = new JButton("…");
private boolean podeHabilitar;
private List pks;
private String sql;
private boolean obrigatorio;
private String nome;
private List<Object[]> dados;public MeuCampoDBComboBox(final Class tela, String sql, boolean obrigatorio,boolean podeHabilitar, String nome) {
this.obrigatorio = obrigatorio;
this.sql = sql;
this.nome = nome;
this.podeHabilitar = podeHabilitar;
setLayout(new FlowLayout());
add(jcb);
add(jb);
preencher();jb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { try { Method metodoGetTela = tela.getMethod("getTela", new Class[]{}); metodoGetTela.invoke(null, new Object[]{}); } catch (Exception e) { e.printStackTrace(); } } }); jcb.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent fe) { preencher(); } });
}
public void preencher() {
try { jcb.removeAllItems(); pks = new ArrayList(); jcb.addItem("SELECIONE"); pks.add(-1); List<String[]> dados = Conexao.executaQuery(sql); ResultSet rs = Conexao.getConexao().createStatement().executeQuery(sql); while (rs.next()) { pks.add(rs.getInt(1)); jcb.addItem(rs.getString(2)); } } catch (Exception e) { JOptionPane.showMessageDialog(null, "Não foi possível preencher o MeuCampoDBComboBox"); e.printStackTrace(); }
}
@Override public boolean eObrigatorio() { return obrigatorio; }
@Override public boolean eValido() { return true; }
@Override public boolean eVazio() { return(jcb.getSelectedIndex() < 0); }
@Override public void limpar() { jcb.setSelectedIndex(0); }
@Override public void habilitar(boolean status) { jcb.setEnabled(podeHabilitar && status); jb.setEnabled( podeHabilitar && status); }
@Override public Object getValor() { return pks.get(jcb.getSelectedIndex()); } @Override public void setValor(Object valor) { for (int i = 0; i < pks.size(); i++) { if (pks.get(i) == (int)valor) { jcb.setSelectedIndex(i); return; } } // JOptionPane.showMessageDialog(null, getNome() + " não encontrado(a)."); // jcb.setSelectedIndex(-1); } @Override public String getNome() { return nome; }
public String getValorTexto() { return (String) jcb.getSelectedItem(); } public void addItemListener(ItemListener il) { jcb.addItemListener(il); }
}
Tela de Produção:
package tela;
import componente.MeuCampoCheckBox;
import componente.MeuCampoComboBox;
import componente.MeuCampoDBComboBox;
import componente.MeuCampoData;
import componente.MeuCampoInteiro;
import componente.MeuCampoMonetario;
import componente.MeuCampoTexto;
import dao.DaoProducao;
import dao.DaoMateriaPrima;
import dao.DaoProdutoAcabado;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.event.InternalFrameAdapter;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import pojo.Producao;
import pojo.ItensProducao;
import pojo.MateriaPrima;
import tabela.TabelaItem;
import tabela.TableModelItem;
public class TelaCadastroProducao extends TelaCadastro {
public static TelaCadastroProducao tela; public Producao producao = new Producao(); public DaoProducao daoProducao = new DaoProducao(producao); public ItensProducao itemProducao = new ItensProducao(); public MeuCampoInteiro campoCodigo = new MeuCampoInteiro(5, true, false, "Código"); public MeuCampoData campoData = new MeuCampoData(10, true, "Data"); public MeuCampoData campoPrevisao = new MeuCampoData(10, true, "Previsão"); public MeuCampoTexto campoDescricao= new MeuCampoTexto(20, 50, false, "Descrição"); public MeuCampoInteiro campoQuantidade = new MeuCampoInteiro(5,true,true,"Quantidade á ser Produzida"); public MeuCampoComboBox campoStatus = new MeuCampoComboBox(true, true, new String[][] {{"A","Em Andamento"}, {"F", "Finalizada"}}, "Status"); public MeuCampoDBComboBox campoItensMateriaPrima = new MeuCampoDBComboBox(TelaCadastroMateriaPrima.class, DaoMateriaPrima.SQL_COMBOBOX, true, true ,"Matéria-Prima"); public MeuCampoDBComboBox campoProdutoAcabado = new MeuCampoDBComboBox(TelaCadastroProdutoAcabado.class,DaoProdutoAcabado.SQL_COMBOBOX, true, true, "Produto Acabado"); public MeuCampoInteiro campoQuantidadeItem = new MeuCampoInteiro(5, true, true, "Quantidade de Item"); public TabelaItem tabelaItem = new TabelaItem(); public static TelaCadastro getTela() { if (tela == null) { tela = new TelaCadastroProducao(); tela.addInternalFrameListener(new InternalFrameAdapter() { @Override public void internalFrameClosed(InternalFrameEvent e) { TelaSistema.meuJDesktopPane.remove(tela); tela = null; } }); TelaSistema.meuJDesktopPane.add(tela); } TelaSistema.meuJDesktopPane.setSelectedFrame(tela); TelaSistema.meuJDesktopPane.moveToFront(tela); return tela; }
public TelaCadastroProducao() { super("Cadastro de Produção"); adicionarComponente(1, 1, 1, 1, campoCodigo,ESQUERDA); adicionarComponente(2, 1, 1, 1, campoData,ESQUERDA); adicionarComponente(3, 1, 1, 1, campoProdutoAcabado,ESQUERDA); adicionarComponente(4, 1, 1, 1, campoDescricao,ESQUERDA); adicionarComponente(5, 1, 1, 1, campoPrevisao,ESQUERDA); adicionarComponente(6, 1, 1, 1, campoQuantidade,ESQUERDA); adicionarComponente(7, 3, 1, 1, campoQuantidadeItem,ESQUERDA); adicionarComponente(7, 1, 2, 2, campoStatus,ESQUERDA); adicionarComponente(8, 1, 2, 1, tabelaItem,ESQUERDA); adicionarComponente(3, 3, 1, 1, campoItensMateriaPrima,ESQUERDA); habilitarCampos(false); pack(); adicionaListeners(); }
public void setPersistencia() { producao.setId((int) campoCodigo.getValor()); producao.setData((Date) campoData.getValor()); producao.setDescricao((String) campoDescricao.getValor()); producao.setPrevisao((Date) campoPrevisao.getValor()); producao.setQuantidade((int) campoQuantidade.getValor()); producao.setStatus((String) campoStatus.getValor()); producao.getProdutoacabado().setId((int) campoProdutoAcabado.getValor()); producao.setItensProducao(((TableModelItem)tabelaItem.getTabela().getModel()).getDados()); }
public void getPersistencia() { campoCodigo.setValor(producao.getId()); campoData.setValor(producao.getData()); campoDescricao.setValor(producao.getDescricao()); campoPrevisao.setValor(producao.getPrevisao()); campoQuantidade.setValor(producao.getQuantidade()); campoStatus.setValor(producao.getStatus()); campoProdutoAcabado.setValor(producao.getProdutoacabado().getId()); ((TableModelItem) tabelaItem.getTabela().getModel()).setDados(producao.getItensProducao()); } @Override public void incluir() { super.incluir(); campoData.setValor(new Date()); }
@Override public boolean incluirBD() { setPersistencia(); return daoProducao.incluir(); }
@Override public boolean alterarBD() { setPersistencia(); return daoProducao.alterar(); }
@Override public boolean excluirBD() { setPersistencia(); return daoProducao.excluir(); }
@Override public void consultar() { super.consultar(); new TelaConsulta(this, "Consulta de Produção", new String[]{"Código", "Data", "Previsão", "Descrição", "Quantidade", "Status"}, DaoProducao.SQL_PESQUISAR); }
@Override public void preencherDados(int pk) { producao.setId(pk); daoProducao.consultar(); getPersistencia(); super.preencherDados(pk); } public void adicionaListeners() { campoItensMateriaPrima.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent ie) { if (ie.getStateChange() == ItemEvent.SELECTED) { tabelaItem.getTableModel().alteraMateriaPrima(campoItensMateriaPrima.getValor(), tabelaItem.getLinhaSelecionada()); MateriaPrima materiaprima = tabelaItem.getTableModel().getMateriaPrima(tabelaItem.getLinhaSelecionada()); campoQuantidadeItem.setValor(materiaprima.getQuantidade()); //* } } }); campoQuantidadeItem.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent fe) { tabelaItem.getTableModel().alteraQuantidade(campoQuantidadeItem.getValor(), tabelaItem.getLinhaSelecionada()); } }); tabelaItem.getTabela().getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent lse) { if (!lse.getValueIsAdjusting() && tabelaItem.getTabela().getSelectedRow() >= 0) { ItensProducao itensProducao = tabelaItem.getTableModel().getItensProducao(tabelaItem.getTabela().getSelectedRow()); campoItensMateriaPrima.setValor(itensProducao.getMateriaprima().getId()); campoQuantidadeItem.setValor(itensProducao.getQuantidade()); } } }); }
@Override public boolean verificarCampos() {
// if (super.verificarCampos() == false) { //Esta linha faz exatamente o mesmo do que a linha abaixo.
if (!super.verificarCampos()) {
return false;
}
List itens = ((TableModelItem) tabelaItem.getTabela().getModel()).getDados();
for (int i = 0; i < itens.size(); i++) {
if (itens.get(i).getMateriaprima().getId() == 0) {
JOptionPane.showMessageDialog(null,
“Exite(m) Matéria-Prima(s) não selecionado(s).”);
return false;
}
if (itens.get(i).getQuantidade() <= 0) {
JOptionPane.showMessageDialog(null,
“Existe(m) Matéria-Prima(s) com quantidade inválida(s).”);
return false;
}} return true; }
}
A saída de erro :
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at componente.MeuCampoDBComboBox.getValor(MeuCampoDBComboBox.java:127)
at tela.TelaCadastroProducao$2.itemStateChanged(TelaCadastroProducao.java:164)
at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1223)
at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1280)
at javax.swing.JComboBox.contentsChanged(JComboBox.java:1330)
at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:118)
at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:93)
at javax.swing.DefaultComboBoxModel.addElement(DefaultComboBoxModel.java:131)
at javax.swing.JComboBox.addItem(JComboBox.java:716)
at componente.MeuCampoDBComboBox.preencher(MeuCampoDBComboBox.java:71)
at componente.MeuCampoDBComboBox$2.focusGained(MeuCampoDBComboBox.java:58)
at java.awt.AWTEventMulticaster.focusGained(AWTEventMulticaster.java:220)
at java.awt.Component.processFocusEvent(Component.java:6422)
at java.awt.Component.processEvent(Component.java:6289)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:986)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:610)
at java.awt.Component.dispatchEventImpl(Component.java:4760)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
CONSTRUÇÃO PARADA (tempo total: 12 segundos)
Desde já Agradeço.