netbeans wmawia mi, że mój komponent to nie javabean

0

Witam,
potrzebowałem dzrewa checkboxów reprezentujących podział administracyjny więc sobie go napisałem

import it.cnr.imaa.essi.lablib.gui.checkboxtree.CheckboxTree;
import java.io.Serializable;
import java.util.List;
import javax.swing.tree.DefaultMutableTreeNode;

/**
 *
 * @author qbs
 */
public class PaCheckboxTreeBean extends CheckboxTree implements Serializable{
    public DefaultMutableTreeNode kraj= null;
    public PaCheckboxTreeBean() {
        super(new DefaultMutableTreeNode("Polska"));

        kraj = (DefaultMutableTreeNode) this.getModel().getRoot();

        javax.persistence.EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("BazaFirmPU");
        javax.persistence.EntityManager em = emf.createEntityManager();

        javax.persistence.Query query = em.createNamedQuery("wojewodztwoPowiat");
        List<Podzial> lista = query.getResultList();
        DefaultMutableTreeNode wojewodztwo = null;
        DefaultMutableTreeNode powiat = null;
        for (Podzial l : lista) {
            if (l.getNazdod().equals("województwo")) {
                wojewodztwo = new DefaultMutableTreeNode((l.getNazwa().toLowerCase()));
                kraj.add(wojewodztwo);
            } else {
                powiat = new DefaultMutableTreeNode(l.getNazwa());
                wojewodztwo.add(powiat);
            }
        }
        this.expandRow(0);
        this.setRootVisible(false);
    }
}

gdy chce go dodać do formatki wypluwa

The component cannot be instantied. Please make sure it is a JavaBeans component.

Teraz jakoś go załadowałem robiąc myk: skompilowałem i wstawiłem komponent:

import it.cnr.imaa.essi.lablib.gui.checkboxtree.CheckboxTree;
import java.io.Serializable;
import java.util.List;
import javax.swing.tree.DefaultMutableTreeNode;

/**
 *
 * @author qbs
 */
public class PaCheckboxTreeBean extends CheckboxTree implements Serializable{
    public DefaultMutableTreeNode kraj= null;
    public PaCheckboxTreeBean() {
        super(new DefaultMutableTreeNode("Polska"));
        kraj = (DefaultMutableTreeNode) this.getModel().getRoot();

a później dokleiłem reszte kodu.

Ponieważ aplikacja, którą piszę musi być napisana profesjonalnie mam pytanie co z tym beanem nie tak i czy może się on wysypać jakoś? Podejrzewam, ze to przez odwołanie do bazy, ale z drugiej strony czy da się to jakoś obejść?

0

Każdy bean musi:
a) posiadac konstruktor bezargumentowy
b) dla każdego pola musi mieć getter'a i setter'a

   private/*public*/ SomeClass someVariable;
   ....
   public SomeClass getSomeVariable()
   {
       return someVaraibale;
   }
   public void setSomeVariable(SomeClass a)
   {
       someVariable=a;
   }

Twoja klasa nie spełnia warunku b).
P.S. Trochę inna konwencja nazw getter'a i setter'a obowiązuje dla pól logicznych.

0

Pole kraj w kodzie, który spasował też nie ma metod set i get a jednak ładnie go wyświetliło? Mimo wszystko spróbowałem i napisałem coś takiego, zweryfikuj czy o to chodziło...
dalej to samo.

import it.cnr.imaa.essi.lablib.gui.checkboxtree.CheckboxTree;
import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;
import javax.swing.tree.DefaultMutableTreeNode;

/**
 *
 * @author qbs
 */
public class PaCheckboxTreeBean extends CheckboxTree implements Serializable{

    public EntityManager getEm() {
        return em;
    }

    public void setEm(EntityManager em) {
        this.em = em;
    }

    public EntityManagerFactory getEmf() {
        return emf;
    }

    public void setEmf(EntityManagerFactory emf) {
        this.emf = emf;
    }

    public DefaultMutableTreeNode getKraj() {
        return kraj;
    }

    public void setKraj(DefaultMutableTreeNode kraj) {
        this.kraj = kraj;
    }

    public List<Podzial> getLista() {
        return lista;
    }

    public void setLista(List<Podzial> lista) {
        this.lista = lista;
    }

    public DefaultMutableTreeNode getPowiat() {
        return powiat;
    }

    public void setPowiat(DefaultMutableTreeNode powiat) {
        this.powiat = powiat;
    }

    public Query getQuery() {
        return query;
    }

    public void setQuery(Query query) {
        this.query = query;
    }

    public DefaultMutableTreeNode getWojewodztwo() {
        return wojewodztwo;
    }

    public void setWojewodztwo(DefaultMutableTreeNode wojewodztwo) {
        this.wojewodztwo = wojewodztwo;
    }
    public DefaultMutableTreeNode kraj= null;
    javax.persistence.EntityManagerFactory emf;
    javax.persistence.EntityManager  em;
    javax.persistence.Query query;
    List<Podzial> lista;
    DefaultMutableTreeNode wojewodztwo = null;
    DefaultMutableTreeNode powiat = null;
    
    public PaCheckboxTreeBean() {
        super(new DefaultMutableTreeNode("Polska"));

        kraj = (DefaultMutableTreeNode) this.getModel().getRoot();

        emf = javax.persistence.Persistence.createEntityManagerFactory("BazaFirmPU");
        em = emf.createEntityManager();

        query = em.createNamedQuery("wojewodztwoPowiat");
        lista = query.getResultList();

        for (Podzial l : lista) {
            if (l.getNazdod().equals("województwo")) {
                wojewodztwo = new DefaultMutableTreeNode((l.getNazwa().toLowerCase()));
                kraj.add(wojewodztwo);
            } else {
                powiat = new DefaultMutableTreeNode(l.getNazwa());
                wojewodztwo.add(powiat);
            }
        }
        this.expandRow(0);
        this.setRootVisible(false);
    }
}

0

A, czy gdy chcesz dodać CheckboxTree do formatki, to też pojawia się błąd?
Jeżeli tak, to znaczy, że CheckboxTree nie jest JavaBeanem.
Wydaje mi się, że JavaBean może dziedziczyć tylko po JavaBeanie (Object i JComponent to beany).

Btw. Czy nie widzisz różnicy pomiędzy zmienną lokalną metody, a zmienną klasy?
Gettery i settery są potrzebne tylko do zmiennej kraj.

0
__krzysiek85 napisał(a)

A, czy gdy chcesz dodać CheckboxTree do formatki, to też pojawia się błąd?

W pierwszym poście napisałem, że mam kod CheckboxTree z dodanym jednym węzłem i śmiga jako javabean. (jest tam napisany ten kod)

__krzysiek85 napisał(a)

Btw. Czy nie widzisz różnicy pomiędzy zmienną lokalną metody, a zmienną klasy?
Gettery i settery są potrzebne tylko do zmiennej kraj.

Widzę różnice, w tym kodzie z setterami i getterami zmienne te są zmiennymi klasy...
Zobaczyłem, że netbeans podobnie generuję więc zrobiłem analogicznie dla pewności.

[edit:]
dla potomnych:
rozwiązałem problem wykonując dynamiczni funkcje tworzącą elementy z bazy w konstruktorze klasy zawierającej komponent i przekazałem wynik funkcji przez konstruktor komponentu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1