Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

JAVA nie widzi mi publicznego obiektu w innym pliku


Rekomendowane odpowiedzi

Opublikowano

To tak: 

Mam sobie klase PanelRoboczy, MyJFrame i ButtonListener( implementuje action Listenera)

 

Dalej:

W MyJFrame mam w publicu stworzony obiekt klasy PanelRoboczy o nazwie panelRoboczy, który potem sobie dodaje w konstruktorze MyJFrame addem. 

 

 

Mój problem polega na tym, że ButtonListener nie widzi mi tego obiektu i nie mogę sobie napisać do niego akcji,i tez nie moge sobie wywołać publicznych metod klasy i jest mi smutno bo jest prawie 7 a ja wiem, ze nic nie wiem i mnie uj strzela <3<3<3

 

Każda klasa oczywiście osobny plik. 

 

A oto kody : 

 

Frame:

 

Listener     <---- o tutaj mi nie działa i jest komentarz co chcę osiagnąć. 

 

PanelRoboczy

 

 

ssik z "pseudo projektu"

 

 

Opublikowano

Żeby wywołać na tym obiekcie metodę musisz go mieć. W ButtonListener nie masz w żaden sposób do niego dostępu, bo jest on polem (nawet nie publicznym) klasy MyJFrame, czyli aby mieć do niego dostęp musiałbyś zdobyć obiekt MyJFrame. Najłatwiej by było gdybyś panelRoboczy uczynił statycznym (dodał static), albo przekazywał go przez konstruktor do ButtonListener.

 

Co do tego że panelRoboczy nie jest publiczny - w Javie modyfikator daje się przed każdą deklaracją. Czyli:

    public 
            ButtonPanel buttonPanel = new ButtonPanel(buttonPanelX, buttonPenelY, buttonPanelSzerokosc, buttonPanelWysokosc);
            PanelRoboczy panelRoboczy = new PanelRoboczy(PanelRoboczyX, PanelRoboczyY, panelRoboczySzerokosc, panelRonoczyWysokosc);

powinno wyglądać tak:

           public ButtonPanel buttonPanel = new ButtonPanel(buttonPanelX, buttonPenelY, buttonPanelSzerokosc, buttonPanelWysokosc);
           public PanelRoboczy panelRoboczy = new PanelRoboczy(PanelRoboczyX, PanelRoboczyY, panelRoboczySzerokosc, panelRonoczyWysokosc);

(Ale to nic nie zmienia w twoim problemie - pola które nie są publiczne są widoczne przez klasy z tego samego pakietu)

708121422388637873334.png

Opublikowano

Ok więc to co zadeklaruje sobie w klasie

 public ButtonPanel buttonPanel = new ButtonPanel(buttonPanelX, buttonPenelY, buttonPanelSzerokosc, buttonPanelWysokosc);

jest polem, wiec czym jest obiekt ? ( bo myślałem, że to u góry to jest obiekt , a pole to by było jak bym sobie dał int wysokosc np. ) , mógł byś mnie jakoś naprowadzić, bo mi się juz wszystko myli, a chcę to zrozumieć i się dobrze tego nauczyć. 

 

Więc nie ma opcji, żebym sobie stworzył coś nie- statycznego w jednej klasie i używał tego na legalu w 2. , tak jak chciałem to zrobić tutaj tak? 

 

 

 

EDIT  

 

MAIN    Czy to jest dobrym rozwiązaniem teraz? Czy da się to zrobić jakoś "Ladniej" ?  

Listener Edit

Opublikowano

jest polem, wiec czym jest obiekt ?

buttonPanel jest polem zawierającym referencję do obiektu, czyli upraszczając - zawiera obiekt. Możesz stworzyć drugie pole, powiedzmy buttonPanel2 i zrobić coś takiego:

buttonPanel2 = buttonPanel;

Masz dwa pola, ale jeden obiekt.

 

Więc nie ma opcji, żebym sobie stworzył coś nie- statycznego w jednej klasie i używał tego na legalu w 2. , tak jak chciałem to zrobić tutaj tak?

Jest taka możliwość, tylko musisz mieć dostęp do obiektu tej klasy. Tworząc obiekt nie możesz w prosty sposób odwoływać się wszędzie do niego bez wskazywania go, bo powiedzmy że zrobisz drugi. Skąd wtedy będzie wiadomo o który chodzi? Musisz go przekazać listenerowi, np. przez konstruktor. Czyli robisz coś w tym stylu: http://wklej.org/id/1911991/ i pole już nie musi być statyczne.

708121422388637873334.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...