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.