Я бачу це інакше, ніж прийняту відповідь.
1) Чи слід повністю уникати використання цих методів?
Ніколи не уникайте! Вони там, щоб висловити обмеження розміру ваших компонентів менеджеру компонування. Ви можете уникнути їх використання, якщо не використовуєте жодного менеджера макетів і намагаєтесь керувати візуальним макетом самостійно.
На жаль, Swing не має розумних розмірів за замовчуванням. Однак замість того, щоб встановлювати розміри компонента, краще OOP спустити власний компонент з розумними значеннями за замовчуванням. (У такому випадку ви викликаєте setXXX у своєму нащадковому класі.) Або ви можете замінити методи getXXX для того ж ефекту.
2) Методи були визначені причиною. То коли я повинен їх використовувати? У якому контексті? Для яких цілей?
Завжди. Коли ви створюєте компонент, встановіть його реалістичний мінімальний / бажаний / максимальний розмір відповідно до використання цього компонента. Наприклад, якщо у вас є JTextField для введення символів країни, таких як Великобританія, його бажаний розмір повинен бути настільки широким, щоб відповідати двом символам (з поточним шрифтом тощо), але, напевно, безглуздо дозволяти йому зростати більше. Адже символи країни - це дві символи. Навпаки, якщо у вас є JTextField для введення, наприклад, імені клієнта, він може мати бажаний розмір на зразок розміру пікселя на 20 символів, але може зрости до більшого, якщо розмір буде змінено, тому встановіть максимальний розмір більше. У той же час, мати JTextField з 0 пікселями в ширину безглуздо, тому встановіть реалістичний мінімальний розмір (я б сказав, розмір пікселя - 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 стає шириною 0 пікселів або може розширити вікно так, що JTextField знаходиться на двох дисплеях на налаштування декількох дисплеїв).
Але, можливо, ви можете використовувати відсотки, щоб контролювати розміри великих будівельних блоків вашого gui (панелі, наприклад).
Ви можете використовувати JSplitPane, де ви можете попередньо встановити співвідношення двох сторін. Або ви можете використовувати MigLayout, який дозволяє встановлювати такі обмеження у відсотках, пікселях та інших одиницях.
JEditorPane
HTML-коду, який сам по собі не пропонує ширини. ОТО я не впевнений, чи щось я пропустив. Я ретельно перегляну відповіді на тему, але мені було цікаво, чи є у вас коментарі, особливо щодо останнього випадку.