Проблема с BorderLayout
и большинство других менеджеров компоновки, такие как BoxLayout
или GridBagLayout
является то, что они устанавливают зазоры между компонентами в пикселях. Это не переносимо, потому что на разных экранах макет будет выглядит по-другому. Если вы создаете свой пользовательский интерфейс на 19-дюймовом мониторе, он не будет выглядеть хорошим на 32-дюймовом мониторе. Теперь мы говорим о приложении Java, где мобильность имеет первостепенное значение.
К счастью, с GroupLayout
или MigLayout
мы можем создать действительно портативный интерфейс.
package com.zetcode;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;
public class MigLayoutTwoButtonsEx extends JFrame {
public MigLayoutTwoButtonsEx() {
initUI();
}
private void initUI() {
JButton btn1 = new JButton("B1");
JButton btn2 = new JButton("B2");
JTextArea area = new JTextArea(15, 28);
area.setBorder(BorderFactory.createEtchedBorder());
createLayout(btn1, btn2, area);
setTitle("MigLayout example");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void createLayout(JComponent... arg) {
setLayout(new MigLayout("gap 5lp 7lp"));
add(arg[0], "split 2");
add(arg[1], "wrap");
add(arg[2], "push, grow, span");
pack();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
MigLayoutTwoButtonsEx ex = new MigLayoutTwoButtonsEx();
ex.setVisible(true);
});
}
}
Приводится пример с менеджером MigLayout
.
setLayout(new MigLayout("gap 5lp 7lp"));
Мы используем логические пиксели для определения наших пробелов.
Скриншот:

Спасибо, Бергер, это мне нужно, я много часов пробовал и не работал, я использовал borderlayout в своем фрейме и помещал Jpanel как flowlayout для добавления моих кнопок, но когда я хочу поставить jtextarea, ничего не работает. Но я пробую с вашим кодом и работает. Спасибо за ваше время и помогите ребятам, я очень ценю. –
Добро пожаловать :) – Berger
С 'new EmptyBorder (10, 10, 10, 10)' вы жестко кодируете объем используемого пространства. Это не переносимо. –