Converter esse metodo para lista?

5 respostas
C

Tenho o código abaixo que funcionar perfeitamente exibindo os dados em uma jtable.

public List<Alternativas> findAlternativasEntities() {
        return findAlternativasEntities(true, -1, -1);
    }
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {


      DefaultTableModel dtm = (DefaultTableModel) this.jTable1.getModel();
            AlternativasJpaController alt = new AlternativasJpaController();
      dtm.setRowCount(0);

      List<Alternativas> ctto =  alt.findAlternativasEntities();
        for (Iterator<Alternativas> it = ctto.iterator(); it.hasNext();) {
            Alternativas alternativas = it.next();

            Object [] rowData = {alternativas.getIdPergunta(),alternativas.getAlternativa1(),
            alternativas.getAlternativa2(),alternativas.getAlternativa3(),alternativas.getAlternativa4()};
            dtm.addRow(rowData);
Só que preciso tbm utilizar o metodo abaixo para lista informações entrando com um INT como parâmetro, mais não consigue montar a lista. Algué saberia me dizer como monta-lá?
public List<Alternativas> findAlternativas(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return (List<Alternativas>) em.find(Alternativas.class, id);
        } finally {
            em.close();
        }
    }

5 Respostas

ViniGodoy

Infelizmente seu método não funciona perfeitamente. Motivo? Usa o DefaultTableModel. Isso significa que:

  1. Você está duplicando dados desnecessariamente;
  2. Você está usando sincronização em excesso;
  3. Você está gastando processamento à toa;
  4. Você irá ter mais dificuldade para inserir, remover ou ordenar linhas;
  5. Seu código está macarrônico e misturando dados de negócio com a interface gráfica.

Se vai usar a JTable, vale muito a pena entender como ela funciona. Pare um tempo, aprenda a montar um TableModel, e depois conversamos sobre sua dúvida. Isso é, se ela ainda existir.

C

Vini
O meu código funcionou quando eu usei alt.findAlternativasEntities(); ( para trazer todos os dados ), só gostaria de saber como altero o metodo para receber um parametro Int, pois quero que retorne apenas os dados cujo o Id for igual a minha variável.

…e sobre o lance do Default já vi algumas coisas negativas mesmo, vou procurar saber mais.

De qualquer forma Valeu.

drsmachado

Ocorre erro?
Não encontra?
Exception?
Não retorna nada?

C

drsMachado,

ele retorna o erro abaixo quando uso o metodo

public List<Alternativas>findAlternativas(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return (List<Alternativas>) em.find(Alternativas.class, id);
        } finally {
            em.close();
        }

    }

O erro é nessa linha return (List) em.find(Alternativas.class, id);

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: jquest.Alternativas cannot be cast to java.util.List
        at jquest.AlternativasJpaController.findAlternativas(AlternativasJpaController.java:114)
        at jquest.jEditQuest.jButton1ActionPerformed(jEditQuest.java:277)
        at jquest.jEditQuest.access$100(jEditQuest.java:33)
        at jquest.jEditQuest$2.actionPerformed(jEditQuest.java:168)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
drsmachado

Um pouco de java básico…
Um objeto de uma classe só pode ser convertido em um objeto igual ou que contenha os mesmos atributos que o que ele possui ou, quando tratamos de tipos primitivos, o tipo a ser “casteado” deve comportar o tipo original (não se pode fazer cast de long para int, mas de int para long, sem problemas).

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: jquest.Alternativas cannot be cast to java.util.List

Esse erro diz isto, pois o tipo retornado pelo método é um objetodo tipo Alternativas e não uma List ou ArrayList.
Duas possibilidades, monte a tua própria lista “na unha” (receba o valor retornado, instancie a lista, coloque o objeto nela e retorne-a) ou mude o tratamento na camada correspondente, para que ele chegue em condições de popular o DefaultTableModel (ele recebe como argumento para cada linha, um array de Object…)

Criado 30 de maio de 2011
Ultima resposta 30 de mai. de 2011
Respostas 5
Participantes 3