Obsługa menu

0

Witam :)

Mam programik na JFrame, a w nim od groma jPaneli. Nie chcę korzystać z zakładek (mocno spowalniają jak jest dużo treści), tylko pomyślałem o wstawieniu Menu (kiedyś trzeba :D). Załóżmy, że mam już Menu ze zbudowaną strukturą. Teraz pytanie: co zrobić, by po wybraniu np. "Menu > MenuWewnętrzne > Item1" otwierał mi się przypisany do tego Itemu1 konkretny jPanel, a zamykał się poprzedni? Oczywiście do aktywnych Itemów menu dodałem już "actionPerformed" i pewnie skorzystam z metody getCommand, ale nie wiem jak rozwiązać kwestię otwierania wybranego itemu i zamykania poprzedniego. Będę wdzięczny za rady :)

Pozdrawiam serdecznie!

0

Nie bardzo rozumiem problem. Panele zapewne masz w jakiejś kolekcji / mapie skoro jest ich tak dużo. Jaki to problem zmienić visibility aktualnemu panelowi a tego wybranego z menu uwidocznić?

0

To jest tak, że mam główne "okno" JFrame i "pod" nim (w nim?) całą resztę (jPanele). I teraz pytanie: co zrobić, by wybierając dany element z MenuBara (które jest w JFrame również) uwidaczniać tylko jeden jPanel w oknie JFrame.

0

Ech no normalnie. Powiedzmy że panele masz w tablicy panele[]. Początkowo wszystkie panele mają setVisible(false). w actionPerformed danej opcji menu dajesz:

panele[jakiśtam_indeks].setVisible(true);
0

Dziękuję Ci bardzo za odpowiedź :)

0

Mam jeszcze jedno pytanie. Klikając Item w menu ustawiam setVisible wybranego okienka na true. Co zrobić jednak, by wszystkie pozostałe wskoczyły na false, nie musząc wypisywać nazw wszystkich paneli w kodzie?

1

Wrzucic panele do kolekcji, np. do listy i potem po niej przeiterować.

List<JPanel> panele = new ArrayList<JPanel>()
// dodajemy panele, najlepiej też w pętli ;P
for(JPanel panel : panele){
  panel.setVisible(false);
}
0

Kurczę.. no zaciąłem się.. Utworzyłem nową klasę "Lista Panele" i próbuję utworzyć nową listę:

List<JPanel> panele = new ArrayList<JPanel>();

Ale podkreśla mi na czerwono "JPanel". Nie widzi takiego typu, czy co tam. Co zrobić żebym mógł utworzyć listę dla obiektów JFrame i dodać do niej po nazwie te obiekty?

0

A programujesz lodówką? Bo normalne IDE potrafi zrobić magiczne "fix import" i zaimportować sobie odpowiednie klasy...

0

Na pewno na czerwono? Jeżeli używasz javy 7, to usuń nazwę typu spomiędzy <> przy new.

A co do poprzedniego problemu z panelami, to jeżeli masz tylko 1 panel otwarty na raz, a ewentualne inne są w nim zawarte, to wystarczy pamiętać tylko poprzedni indeks. Nie potrzeba koniecznie iterować na ślepo po wszystkich bo ustawienie setVisible na kontenerze zrobi to samo również na składnikach z automatu.

0

Nie, na lodówkę mnie niestety nie stać, więc programuję na papierze toaletowym (rwie się przy kompilacji ;/). W każdym razie dziękuję za radę "fix import". Znalazłem ową opcję i zaimportowało mi brakujące pakiety :) wiem, że może być irytującym odpowiadanie na takie proste pytania, ale na swoją obronę mam to, że dopiero zaczynam i dopóki nie przeszukam innych źródeł samodzielnie, to nie proszę o pomoc, a tak mi się spodobało programowanie, że będę was często męczył :D

PS i dzięki za przeniesienie tematu :) następnym razem postaram się napisać we właściwym dziale :)

PS 2 Olamagato, tak podkreślało na czerwono, ale to dlatego, że nie miałem zaimportowanych odpowiednich pakietów (javax.swing.JPanel). Zrobiłem "fix import" jak poradził kolega Sh i podziałało :) btw wypróbuję Twoją metodę, powinno być git :)

Pozdrawiam!

0

@Hilek w Eclipse wejdź sobie w preferences i tam wpisz w szukajce "save actions" i tam wszystko co sie da pozaznaczaj ;)

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