Я вижу это иначе, чем принятый ответ.
1) Должен ли я полностью избегать использования этих методов?
Никогда не избегать!Они там, чтобы выразить ограничения размера ваших компонентов в менеджере макета.Вы можете избежать их использования, если не используете какой-либо менеджер макетов и попытаетесь управлять визуальным макетом самостоятельно.
К сожалению, Swing не поставляется с разумными размерами по умолчанию.Однако вместо того, чтобы устанавливать размеры компонента, лучше ООП спускать свой собственный компонент с разумными значениями по умолчанию.(В этом случае вы вызываете setXXX в своем классе-потомке.) В качестве альтернативы вы можете переопределить методы getXXX для того же эффекта.
2) Методы были определены по определенной причине.Так, когда я должен использовать их?В каком контексте?Для каких целей?
Всегда.При создании компонента установите его реалистичный минимальный / предпочтительный / максимальный размер в соответствии с использованием этого компонента.Например, если у вас есть JTextField для ввода символов страны, таких как Великобритания, его предпочтительный размер должен быть таким же широким, чтобы соответствовать двум символам (с текущим шрифтом и т. Д.), Но, вероятно, не имеет смысла позволять ему расти еще больше.Ведь символы страны - это две буквы.Напротив, если у вас есть JTextField для ввода, например, имени клиента, он может иметь предпочтительный размер, такой как размер пикселя для 20 символов, но может увеличиваться до большего при изменении размера макета, поэтому установите максимальный размер больше.В то же время наличие JTextField шириной 0px не имеет смысла, поэтому установите реалистичный минимальный размер (я бы сказал, размер пикселя в 2 символа).
3) Каковы конкретно негативные последствия использования этих методов?
(я могу думать только о добавлении переносимости между системами с разным разрешением экрана).
Никаких негативных последствий.Это подсказки для менеджера макета.
4) Я не думаю, что любой LayoutManager может точно удовлетворить все желаемые потребности макета.
Действительно ли мне нужно реализовать новый LayoutManager для каждого небольшого измененияна моем макете?
Нет, определенно нет.Обычный подход заключается в каскадном расположении различных базовых менеджеров компоновки, таких как горизонтальная и вертикальная компоновка.
Например, компоновка ниже:
<code><pre>
+--------------+--------+
| ###JTABLE### | [Add] |
| ...data... |[Remove]|
| ...data... | |
| ...data... | |
+--------------+--------+
состоит из двух частей.Левая и правая части представляют собой горизонтальное расположение.Правая часть представляет собой JPanel, добавленный к горизонтальной компоновке, и эта JPanel имеет вертикальную компоновку, которая размещает кнопки по вертикали.
Конечно, это может усложниться в реальной компоновке.Поэтому основанные на сетке менеджеры компоновки, такие как MigLayout, намного лучше, если вы собираетесь разрабатывать что-то серьезное.
5) Если ответ на вопрос 4 - «да», не приведет ли это к распространению LayoutManagerклассы, которые будет трудно поддерживать?
Нет, вы определенно не будете разрабатывать менеджеры по расположению, если вам не нужно что-то очень особенное.
6) В ситуации, когда мне нужно определить пропорции ...
между дочерними элементами компонента (например, child1 должен использовать 10% пространства, child2 40%, child3 50%), возможно ли достичь этого без реализации пользовательского LayoutManager?
Как правило, после того, как предпочтительные размеры установлены правильно, вы можете не захотеть ничего делать в процентах.Просто потому, что проценты не имеют смысла (например, бессмысленно иметь JTextField в 10% от размера окна - поскольку можно уменьшить окно, чтобы JTextField стал шириной 0px, или можно расширить окно, чтобы JTextField находился на двух экранах на экране.настройка нескольких дисплеев).
Но иногда вы можете использовать проценты для управления размерами больших строительных блоков вашего графического интерфейса (например, панелей).
Вы можете использовать JSplitPane там, где выМожно предварительно установить соотношение двух сторон.Или вы можете использовать MigLayout, который позволяет вам устанавливать такие ограничения в процентах, пикселях и других единицах.