Odwolanie do JList pomiedzy ramkami

0

Witam
Posiadam dwie ramki
pierwsza.java
druga.java

w pierwszej ramce mam umieszczony komponent JList (publiczny) i bez problemu dodaje do niego elementy

DefaultListModel modelListy = new DefaultListModel();
modelListy.addElement(TextPane1.getText());

JList List1 = new JList(modelListy);

w drugiej ramce mam rowniez komponent JList i potrzebuje w nim umiescic pierwszy element z List1 z ramki pierwszej. Gdy probuje w ponizszy sposob nie wiem dlaczego wyskakuje mi blad:/

DefaultListModel modelListy2 = new DefaultListModel();
Object item = new pierwsza().List1.getModel().getElementAt(0); 
modelListy2.addElement(item);   

JList List2 = new JList(modelListy2);
0
  1. Jaki błąd wyskakuje, to mamy zgadnąć?
  2. Ten wiersz
Object item = new pierwsza().List1.getModel().getElementAt(0);

jest bez sensu. Ty nie pobierasz pierwszego elementu z istniejącej listy. Tworzysz nowy obiekt typu pierwsza, w którym zapewne lista jest pusta, zatem niczego nie możesz pobrać.

0
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
	at java.util.Vector.elementAt(Vector.java:470)
	at javax.swing.DefaultListModel.getElementAt(DefaultListModel.java:89)
	at pl.pjd.Game.RandomButtonActionPerformed(Game.java:92)
	at pl.pjd.Game.access$000(Game.java:5)
	at pl.pjd.Game$1.actionPerformed(Game.java:35)
	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:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:682)
	at java.awt.EventQueue$3.run(EventQueue.java:680)
	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:696)
	at java.awt.EventQueue$4.run(EventQueue.java:694)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

Nie wiem czy to jest bezsensu bo gdy ten kod umiescilem w ramce pierwszej i tam dodalem drugi JList to wszystko dzialalo.
Tworzy nowy obiekt typu pierwsza bo tak nazywa sie ramka i w ten sposob moge sie odwolac do komponentu

0

A ja wiem, że jest bez sensu. Ty nie masz tworzyć nowej ramki, Ty masz pobrać element z ramki już istniejącej. Pytanie jak to zrobić padło na forum już kilkaset razy, poszukaj pytania i odpowiedzi.

0

Dzieki za pomoc. Dalbys mi jeszcze jakas wskazowke albo powiedzial jak to zrobic bo szukam i znalezc nie moge.

Znalazlem komuniakacja miedzy ramkami ale to nie rozwiazuje mojego problemu jak rowniez tez tworze w NetBeans przy uzyciu graficznego desingera

1

Zakładam, że wpierw powstaje obiekt klasy pierwsza.

pierwsza first = new pierwsza(); //zapamiętujesz referencję
...
new druga(first); //przekazujesz do konstruktora klasy druga zapamiętaną  referencję
...
public druga(pierwsza first)
{
   this.first = first; //zapamiętujesz w polu klasy przekazaną referencję, żeby była dostępna nie tylko w konstruktorze, ale i w każdej metodzie
...
Object item = first.List1.getModel().getElementAt(0); 

Jeżeli konstruktor klasy druga jest wywoływany z konstruktora klasy pierwsza, to dwa pierwsze wiersze można zamienić na

new druga(this);
0

Dzieki! Dokladnie o to chodzilo

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