Swing - multipaged panel ?

0

Witajcie ;)

Mam pytanie - jak poprawnie powinno się zrealizować w Swingu następujący interfejs ? (Nie mam doświadczenia w programowaniu interfejsu w Javie, więc nie chciałbym "wynajdywać koła od nowa", gdy mogę zapytać doświadczonych wyjadaczy ;) ).

Mam okienko, na którym przewiduję kilka ekranów, między którymi będę się przełączał (np. widok tabelaryczny jakichś danych + ekran modyfikacji pojedynczego rekordu). Do tego potrzebuję ekran, który może wyskoczyć w różnych momentach (coś w stylu: Proszę czekać...). Prawdopodobnie te "ekrany" trzeba będzie zrealizować na JPanel'ach. Ale jakoś mi się to nie podoba... brakuje mi (nie mogłem zlokalizować w necie jakoś) komponentu a la Notebook z Delphi, gdzie mogę sobie powiedzieć, jaka "strona" ma być widoczna. Teoretycznie można utworzyć mnóstwo paneli i bawić się ich z-order (patrz: LayeredPane), bądź setVisible(true/false) (horror i n00bostwo ;p).

Moje pytanie w skrócie brzmi:

  1. w czym przechowywać szereg ekranów, między którymi można się przełączać ?
  2. jak się między nimi przełączać ?
  3. jak "ładnie" zrealizować MVC na tych ekranach (każdy ekran ma implementować Observer ? A może tylko okno i to ono decyduje, co dalej się dzieje ?) ?

P.S.

Nie chodzi mi o JTabbedPane - bo nie chcę widzieć żadnych zakładek

Z góry dzięki za odpowiedź :)

0

A klasę JDesktopPane testowałeś? Możesz go zobaczyć tu http://atos.wmid.amu.edu.pl/~bogdan/Widok.jpg

0

Dzięki. Tak, widziałem ten komponent, ale chodzi o to, żeby te widoki nie były widoczne jednocześnie (równolegle), tak jak to jest w przypadku tych zagnieżdżonych okienek w JDesktopPane), ale o to, by w danej chwili był widoczny tylko jeden określony ekran (zależny od stanu programu - np. stan: oglądanie listy czegoś tam -> widok: tabelka, a po kliknięciu edytuj rekord "przechodzimy" do stanu: edycja rekordu i pojawia się widok z polami, w których można edytować dane).

Jeśli muszę to zrobić na zwykłych panelach i przełączać się pomiędzy nimi, to jaką metodę polecacie ? Może wsadzić je do HashMapy o kluczu String i w tym kluczu trzymać ich nazwy robocze ? I gdy chcę się przełączyć na dany ekran, to pobieram odpowiedni panel z tejże HashMapy ? A może powinienem za każdym razem, gdy jest mi to potrzebne, tworzyć na nowo obiekt klasy odpowiedniego Panelu/Widoku ?

0

Imho, tworzenie na nowo za każdym razem jest złym pomysłem. Użytkownik programu jakoś to okno dostosował do swoich gustów, a jeżeli jest to okno edycyjne, to może już wprowadził jakieś dane. Ja często stosuję taka konstrukcję

if(panel==null)
{
      panel=new Panel(..); 
}
 if(panel.isVisible())
 {
      panel.setExtendedState(JFrame.NORMAL);
 }
 else
{
       panel.setVisible(true);
}
0

Troche rychlo w czas, ale moze komus sie przyda: chodzilo mi o CardLayout.

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