Widzę to inaczej niż zaakceptowana odpowiedź.
1) Czy powinienem całkowicie unikać stosowania tych metod?
Nigdy nie unikaj! Są one po to, aby wyrazić ograniczenia wielkości komponentów dla menedżera układu. Możesz uniknąć ich używania, jeśli nie korzystasz z żadnego menedżera układu i spróbuj samodzielnie zarządzać układem wizualnym.
Niestety, Swing nie ma rozsądnych domyślnych wymiarów. Jednak zamiast ustawiać wymiary komponentu, lepiej OOP schodzić z własnego komponentu z rozsądnymi wartościami domyślnymi. (W takim przypadku wywołujesz setXXX w klasie potomnej.) Alternatywnie możesz zastąpić metody getXXX dla tego samego efektu.
2) Metody zostały zdefiniowane z konkretnego powodu. Kiedy powinienem ich użyć? W jakim kontekście? Do jakich celów?
Zawsze. Podczas tworzenia komponentu ustaw jego realistyczny minimalny / preferowany / maksymalny rozmiar zgodnie z użyciem tego komponentu. Na przykład, jeśli masz JTextField do wprowadzania symboli kraju, takich jak Wielka Brytania, jego preferowany rozmiar powinien być tak szeroki, aby zmieścił się w dwóch znakach (z bieżącą czcionką itp.), Ale prawdopodobnie nie ma sensu pozwolić, aby urósł. W końcu symbole kraju to dwa znaki. Przeciwnie, jeśli masz JTextField do wprowadzania np. Nazwy klienta, może on mieć preferowany rozmiar podobny do rozmiaru piksela dla 20 znaków, ale może wzrosnąć do większego, jeśli zmieni się rozmiar układu, więc ustaw maksymalny rozmiar na więcej. Jednocześnie posiadanie JTextField o szerokości 0 pikseli jest bezcelowe, więc ustaw realistyczny minimalny rozmiar (powiedziałbym, że piksel to 2 znaki).
3) Jakie dokładnie są negatywne konsekwencje stosowania tych metod?
(Mogę tylko pomyśleć o dodaniu przenośności między systemami o różnej rozdzielczości ekranu).
Bez negatywnych konsekwencji. Są to wskazówki dla menedżera układu.
4) Nie sądzę, aby jakikolwiek LayoutManager mógł dokładnie zaspokoić wszystkie pożądane potrzeby układu.
Czy naprawdę muszę wdrożyć nowy menedżer układów dla każdej małej odmiany mojego układu?
Nie definitywnie nie. Zwykle stosuje się kaskadowanie różnych podstawowych menedżerów układu, takich jak układ poziomy i pionowy.
Na przykład poniższy układ:
<pre>
+--------------+--------+
| ###JTABLE### | [Add] |
| ...data... |[Remove]|
| ...data... | |
| ...data... | |
+--------------+--------+
</pre>
ma dwie części. Lewa i prawa część mają układ poziomy. Prawa część to JPanel dodany do układu poziomego, a ten JPanel ma układ pionowy, który układa przyciski pionowo.
Oczywiście może to stać się trudne z układem w prawdziwym życiu. Dlatego menedżery układu oparte na siatce, takie jak MigLayout, są znacznie lepsze, jeśli masz zamiar opracować coś poważnego.
5) Jeśli odpowiedź na 4 brzmi „tak”, czy nie doprowadzi to do mnożenia klas LayoutManager, które będą trudne do utrzymania?
Nie, zdecydowanie nie powinieneś tworzyć menedżerów układu, chyba że potrzebujesz czegoś bardzo specjalnego.
6) W sytuacji, gdy muszę zdefiniować proporcje ...
między dziećmi elementu (np. dziecko1 powinno zajmować 10% miejsca, dziecko2 40%, dziecko3 50%), czy można to osiągnąć bez implementacji niestandardowego menedżera LayoutManager?
Zasadniczo po prawidłowym ustawieniu preferowanych rozmiarów możesz nie chcieć nic robić procentowo. Po prostu, ponieważ wartości procentowe są bezcelowe (np. Nie ma sensu mieć JTextField 10% rozmiaru okna - ponieważ można zmniejszyć okno, aby JTextField stał się 0px szeroki, lub można rozwinąć okno, aby JTextField znajdował się na dwóch ekranach na konfiguracja wielu wyświetlaczy).
Ale może się zdarzyć, że użyjesz wartości procentowych do kontrolowania rozmiarów większych elementów konstrukcyjnych twojego GUI (na przykład paneli).
Możesz użyć JSplitPane, gdzie możesz wstępnie ustawić stosunek dwóch stron. Lub możesz użyć MigLayout, który pozwala ustawić takie ograniczenia w procentach, pikselach i innych jednostkach.
JEditorPane
z HTML, który sam nie sugeruje szerokości. OTOH Nie jestem pewien, czy coś przeoczyłem. Dokładnie przejrzę odpowiedzi w wątku, ale byłem zainteresowany, jeśli masz jakieś uwagi, szczególnie w tym drugim przypadku.