2012-02-28 17 views
7

Mam aplikację Java Swing, która zawiera kilka ramek, które z kolei zawierają głównie tabele wyświetlające duże ilości danych. Ponieważ zawsze jest kłopot i czasochłonne rozmieszczenie wszystkich okien i tabel przy starcie, chciałbym zaimplementować funkcję "przestrzeni roboczej", aby użytkownik mógł zapisać ustawienia preferencji, a przy starcie automatycznie ładował przechowywany obszar roboczy do wszystkie okna i tabele wyglądają jak zapisane wcześniej. Konkretnie, ustawienia, które chciałbym przechowywać w obszarze roboczym są:Java Swing zapisz i załaduj obszar roboczy/ustawienia

  • Aktywne okna (JFrame) oraz ich wielkości i położenia na ekranie
  • Table settings, łącznie z wybranych kolumn, kolejność kolumn, szerokość kolumn, sortowanie, filtrowanie

Czy ktoś wie, inteligentny i łatwy sposób, aby osiągnąć ten cel bez oczywiste, a co wydaje się bardzo skomplikowane i uciążliwe, roztwór iteracji przez wszystkie otwarte okna i oszczędzając każdy kawałek informacji z Preferences api ? Dzięki

+1

Zawsze istnieje "serializacja całego GUI", ale podejrzewam, że 1) będą nie podlegające numeracji części tych GUI 2), że będzie to kłopot, aby uzyskać właściwą pracę. –

+0

Uważam, że masz rację co do obu podejrzeń. – hgus1294

+1

możesz rozważyć użycie (Lepiej) Swing Application Framework, który obsługuje przechowywanie stanu aplikacji - między innymi niciami - bezboleśnie (choć przejście na nowy framework może być zbyt inwazyjne :-) – kleopatra

Odpowiedz

7

W tym przypadku oczywiste rozwiązanie, java.util.prefs.Preferences, jest prawdopodobnie poprawne. RCPrefs z tego game jest prostym przykładem pokazującym zapisywanie różnych typów danych, w tym enum. Dokładna implementacja w dużym stopniu zależy od aplikacji. Choć nużący, nie musi być szczególnie skomplikowany. Dla wygody, example używa metod statycznych; preferencje ramek i tabel są prawdopodobnie warte każdej klasy.

+0

Chciałbym powitać kontrprzykład. – trashgod

+0

Dzięki. Przykład był przydatny i pomyślałem, że pomysł stworzenia klas przestrzeni roboczej miał sens. Stworzyłem klasę "WsFrame", która zawiera ogólne ustawienia, takie jak pozycja i rozmiar. Ten obiekt może zawierać jedno lub wiele określonych ustawień, takich jak 'WsTable' (dla ustawień tabeli). Zdecydowałem się na przechowywanie tych informacji przez "Preferencje" i zdecydowałem się po prostu serializować listę obiektów 'WsFrame' przez XStream i przechowywać jako xml (ponieważ jestem leniwy i wygodnie jest przeglądać/edytować wyjście). Właściwie działa całkiem nieźle. Dzięki. – hgus1294

+0

Doskonały. Mogę być zepsuty, ponieważ moja platforma używa XML do implementacji 'Preferences'. Ping me, jeśli dodasz to jako kontrastującą odpowiedź; Myślę, że byłoby to przydatne. – trashgod