Tomasz Dzioba

Tomasz Dzioba wszystkiego po
trochu

Temat: Wstawianie elementów na JPanel

Witajcie.

Jest to mój pierwszy post na tym forum.

Teraz do rzeczy. Postanowiłem sobie przypomnieć sztukę programowania obiektowego. Jednak za czasów wykładów/ćwiczeń operowaliśmy w c# na szczęście widzę spore podobieństwa co mnie przekonało aby jednocześnie potrenować w Javie. Udało mi się kilka rzeczy zrobić jednak stanąłem - pewnie na trywialnym problemie.
Utworzyłem sobie klasę, której zadaniem jest odpytanie bazy danych w celu uzyskania kilku informacji, a następnie przedstawienie tych informacji w JTextField'ach na JPanelu.
Problem zaczyna się kiedy Java próbuje dodać element do JPanel'a. Podejrzewam, że chodzi tutaj o zakleszczanie się wątków i do rozwiązania tego problemu wykorzystywało się w c# takie rzeczy jak delegację.

Może zamieszczę trochę kodu :)

Klasa, która ma być odpowiedzialna za umieszczanie elementów na komponencie.

public class wyswietlacz {
private Point punkt;
private JPanel objekt;

public wyswietlacz(JPanel panel, int x, int y)
{
this.punkt.setLocation(x, y);
this.objekt=panel;
}

public void wyswietl()
{
JLabel lbl_transport = new JLabel("Transport");
JLabel lbl_numer = new JLabel("Numer");
JLabel lbl_nazwa = new JLabel("Nazwa");

lbl_transport.setLocation(this.punkt.getLocation());
this.objekt.add(lbl_transport);
}

public void wyswietl(String transport, String numer, String nazwa)
{
JTextField txt_transport = new JTextField();
JTextField txt_numer = new JTextField();
JTextField txt_nazwa = new JTextField();

txt_transport.setText(transport);
txt_transport.setLocation(this.punkt.x + 40, this.punkt.y + 15);
txt_numer.setText(numer);
txt_nazwa.setText(nazwa);
this.objekt.add(txt_transport);
}
}


I kod, który ma to wszystko uruchomić

wyswietlacz zobrazuj = new wyswietlacz(this.jPanel1, 20, 15);
zobrazuj.wyswietl();


I taki oto błąd wyskakuje

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at amenedzer.wyswietlacz.<init>(wyswietlacz.java:22)
at amenedzer.oknoGlowne.jButton1ActionPerformed(oknoGlowne.java:125)
at amenedzer.oknoGlowne.access$100(oknoGlowne.java:16)
at amenedzer.oknoGlowne$2.actionPerformed(oknoGlowne.java:54)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Tomasz Dzioba edytował(a) ten post dnia 27.04.12 o godzinie 12:28

konto usunięte

Temat: Wstawianie elementów na JPanel

Masz dokładnie napisane co i gdzie się źle dzieje...

3: co to jest "objekt" - ani po polsku, ani po angielsku
7: nigdzie nie tworzysz obiektu punkt. W javie obiekty nie tworzą się same z domyślnym konstruktorem przy deklaracji jak w C++

Przeczytaj dokładnie, zrozum, pobaw się w:
http://docs.oracle.com/javase/tutorial/uiswing/

a potem dopiero zabieraj za właściwe programowanie.
Tomasz Dzioba

Tomasz Dzioba wszystkiego po
trochu

Temat: Wstawianie elementów na JPanel

Z tym, że moja klasa 'wyswietlacz' posiada pole 'punkt', które chyba powinno zostać zadeklarowane w momencie powołania do życia całej klasy. Inna kwestia, że jakby nie było w żaden sposób deklarowane to netbean nie powinien przepuścić projektu podczas kompilacji.

PS. Moja literówka z tym 'objektem'

EDIT:

Faktycznie, oprócz zadeklarowania trzeba w konstruktorze obiektu stworzyć punkt.

this.punkt = new Point();
Tomasz Dzioba edytował(a) ten post dnia 27.04.12 o godzinie 13:36



Wyślij zaproszenie do