Как уже отмечался в комментариях, мы можем получить этот макет «пустые углов» довольно легко с помощью GridBagLayout
. Желтые части - это просто (панель с меткой), которая не имеет текста.
import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class EmptyCornerLayout {
private JComponent ui = null;
GridBagConstraints gbc = new GridBagConstraints();
EmptyCornerLayout() {
initUI();
}
public void initUI() {
if (ui != null) {
return;
}
ui = new JPanel(new GridBagLayout());
ui.setBorder(new EmptyBorder(4, 4, 4, 4));
gbc.weightx = 0.5;
gbc.weighty = 0.5;
gbc.fill = GridBagConstraints.BOTH;
// first row
addComponentToLayout(0, 0, 0d, 0d, Color.YELLOW, "");
addComponentToLayout(0, 1, 1d, 0d, Color.CYAN, "NORTH");
addComponentToLayout(0, 2, 0d, 0d, Color.YELLOW, "");
// 2nd row
addComponentToLayout(1, 0, 0d, 1d, Color.CYAN, "WEST");
addComponentToLayout(1, 1, 1d, 1d, Color.RED, "CENTER");
addComponentToLayout(1, 2, 0d, 1d, Color.CYAN, "EAST");
// last row
addComponentToLayout(2, 0, 0d, 0d, Color.YELLOW, "");
addComponentToLayout(2, 1, 1d, 0d, Color.CYAN, "SOUTH");
addComponentToLayout(2, 2, 0d, 0d, Color.YELLOW, "");
}
private final void addComponentToLayout(
int row, int col,
double weightx, double weighty,
Color color, String text) {
JPanel panel = new JPanel();
panel.setBackground(color);
panel.add(new JLabel(text));
gbc.gridx = col;
gbc.gridy = row;
gbc.weightx = weightx;
gbc.weighty = weighty;
ui.add(panel, gbc);
}
public JComponent getUI() {
return ui;
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception useDefault) {
}
EmptyCornerLayout o = new EmptyCornerLayout();
JFrame f = new JFrame(o.getClass().getSimpleName());
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
больше походит на случай для '' GridBagLayout' или GroupLayout' .. –
Просто используйте два BorderLayout с помощью JPanels. Во внутреннем, добавьте свои северные и южные панели. Поместите внутренний в положение BorderLayout.CENTER в внешнем. Готово. –
В 199-2000 годах я делал апплеты. Я никогда не видел необходимости использовать диспетчер компоновки. Вы хотите, чтобы ваш макет входил и выходил? Мы использовали setlayout (null) и устанавливали вставки каждого компонента самостоятельно, намного лучше размещали и отлично работали даже сегодня – tgkprog