Ogromną różnicą jest to, jak wartość może zmieniać się z upływem czasu, a więc ten, który wybierzesz, powinien być zależny od tego, co chcesz zrobić z kodem.
Jeśli po prostu zadzwonisz pod numer setPreferredSize(new Dimension(500, 500));
, zrobi to zgodnie z oczekiwaniami - ustawi preferowany rozmiar na 500 x 500. Jednak inny kod w aplikacji może potencjalnie zastąpić tę wartość nową - wszystko może wywołać setPreferredSize()
, a ostatnie wywołanie tej metody będzie wynikiem końcowym.
Jeśli jednak zastąpisz w swoim kodzie metodę getPreferredSize()
, zawsze zawsze zwróci 500x500. Nie ma znaczenia, czy któryś z twoich kodów wywołuje metodę setPreferredSize()
, ponieważ są one skutecznie ignorowane. Jeśli przesłonisz także getMinimumSize()
i getMaximumSize()
, możesz wymusić stały rozmiar komponentu, który nie powinien się zmieniać bez względu na rozmiar okna i innych komponentów.
Jednak, jak wspomina @Andrew Thompson w komentarzach, nie jest to gwarantowane, ponieważ niektórzy menedżerowie układu mogą je zignorować, zwłaszcza jeśli piszesz własny menedżer układu i dodajesz komponent niestandardowy do jakiegoś elementu nadrzędnego. kontenery będą również ignorować te metody, w zależności od miejsca/sposobu użycia komponentu. Bez względu na to, jest jeszcze bardziej sztywny niż wywołanie setPreferredSize()
, który może być łatwo wywołany przez inny kod i całkowicie nadpisany.
ja też zastąpić metodę (plus getMinimumSize()
i getMaximumSize()
) getPreferredSize()
dla żadnego z moich niestandardowych składników, takich jak próbnik kolorów, który musi mieć określone wymiary dla komponentu być odpowiednio pomalowane. Bez przesłonięcia tych metod menedżery układu Swing nie wiedzą, w jaki sposób można dostosować położenie niestandardowego komponentu i dostosować go do rozmiaru obiektu JFrame
lub JPanel
.
[niektóre zasady] (http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-setpreferredmaximumminimalsize-methods-in-java-swi) – mKorbel
Dzięki za link. Chociaż to trochę dziwne, że w jednym artykule wymienionym w górnej odpowiedzi mówi się "nigdy nie używaj tej metody [setPreferredSize] !!!" ponieważ nigdy nie miałem z tym żadnych problemów. Ale potem znowu nigdy nie napisałem naprawdę dużych/złożonych interfejsów użytkownika. – IchBinKeinBaum
to jest o programowaniu na najwyższym poziomie :-), ale powiedz, jak unikać błędów, nikt nie mówi, że używanie LayoutManager to łatwa praca, wymaga a) nauki i próbowania, b) zadawania kilku pytań – mKorbel