2008-11-19 16 views
5

Mam "gruby" GUI, że robi się dość skomplikowany i chciałbym dodać linki z jednego miejsca do drugiego, i dodać przyciski wstecz/do przodu, aby ułatwić nawigację. Wydaje mi się, że byłoby to łatwiejsze, gdyby moja aplikacja była adresowalna: każdy kompozyt mógł mieć swój identyfikator URI, a łącza wykorzystywałyby ten URI.W jaki sposób można dostosować interfejs graficzny Swing/JFace/SWT?

Czy istnieją wzorce projektowe mające zastosowanie do tego problemu?

Mogę po prostu przyjrzeć się kodowi źródłowemu Firefoksa lub Eclipse, ale są to ogromne projekty i zajęłoby to sporo czasu, więc o to proszę. Czy gdzieś jest prostszy przykład?

Oczywiście byłoby prostsze, gdybym najpierw zbudował aplikację internetową, ale w najbliższym czasie nie zamierzam przepisywać tej ogromnej aplikacji od zera.

+0

Wszystkie dotychczasowe odpowiedzi zakładają, że istnieje jeden poziom, ale wyobraź sobie górne menu prowadzące do "stron", a następnie każda strona zawiera zagnieżdżone foldery kart. Identyfikator URI musi identyfikować każdą stronę i element karty. –

Odpowiedz

0

W Swing możesz użyć CardLayout. Każda z "stron" może być kartą, a nazwa karty (wybrana podczas dodawania kart do układu) będzie odpowiadać żądanemu identyfikatorowi URI.

Przykład:

String PAGE_1_KEY = "page 1"; 
String PAGE_2_KEY = "page 2"; 
// as many keys as you need 

JFrame frame = ...; 
frame.setLayout(new CardLayout()); 
frame.add(createPage1(), PAGE_1_KEY); 
frame.add(createPage2(), PAGE_2_KEY); 
// etc. 

Następnie w przycisków słuchaczy działania, to nazwałbym

((CardLayout)frame.getLayout()).show(frame, PAGE_1_KEY); // or whichever 
1

Moje rozwiązanie do robienia takich rzeczy zwykle obejmuje listener pattern. W skrócie, zmniejszasz sprzężenie, zapewniając sposób wysyłania i odbierania zdarzeń do i od zainteresowanych stron (w tym przypadku kompozytów). Jest to dość łatwe do wdrożenia, nawet podczas modernizacji. W ten sposób Twoje wydarzenia i imprezy mogą się zmieniać bez zmiany kodu zależnego.

1

Można zbudować "globalny" rejestr, który mapuje unikalne identyfikatory do obiektów (lub może nazw klas). Te obiekty mogą być na przykład JPanels. Kiedy użytkownik kliknie na link lub przycisk, niektóre kontrolery są powiadamiane za pomocą przycisku nowej strony, która ma zostać wyświetlona. Ten kontroler może utworzyć ten JPanel i umieścić go w ramce aplikacji.

1

Moje ostatnie podejście zawarte globalnego menedżera i rejestracji połączeń. Każda część interfejsu użytkownika była w stanie jednoznacznie się nazywać i zarejestrować. Globalny menedżer wie o każdym z nich, a następnie wykorzystuje brudną robotę, aby pokazać tę część. Nawigacja wstecz/do przodu została wykonana przez specjalnego menedżera cofania/ponawiania. Każdy "wyświetlacz" był w stanie uzyskać menedżera nawigacji i zarejestrować zdarzenie "cofnij". Ciężko pracowało, aby działało, ale wynikowa funkcja była całkiem przydatna. Omówiliśmy użycie prostej usługi JNDI do zlokalizowania i nazwania części interfejsu użytkownika. Może to być przydatne w łączeniu.

Powiązane problemy