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