Избавиться от разрыва между JPanels
Вот моя проблема
Как я могу избавиться от зазора от внутреннего прямоугольника (это на самом деле граница средней JPanel)?
Внешний прямоугольник - это расширяемый JCompoment. Внутри он содержит три JPanel
s. Каждый из них использует GridLayout. Я даже пытаюсь установить Hgap на отрицательное значение в большом прямоугольнике, но это ничего не меняет.
Изменить: Извините, вопрос не ясен. Мне нужна граница, но я не хочу разрыва между внутренней границей и внешней границей. Если между ними нет промежутка, весь прямоугольник будет представлять класс диаграммы класса.
4 ответа
Вы можете иметь в виду это так:
import java.awt.*;
import javax.swing.*;
public class GridBadFrame {
private JFrame frame;
private JPanel pnlCenter;
private JPanel pnl1;
private JPanel pnl2;
private JPanel pnl3;
public GridBadFrame() {
pnl1 = new JPanel();
pnl1.setBackground(Color.red);
pnl2 = new JPanel();
pnl2.setBackground(Color.blue);
pnl3 = new JPanel();
pnl3.setBackground(Color.red);
JLabel lblWest = new JLabel();
lblWest.setPreferredSize(new Dimension(50, 150));
JLabel lblEast = new JLabel();
lblEast.setPreferredSize(new Dimension(50, 150));
JLabel lblNorth = new JLabel();
lblNorth.setPreferredSize(new Dimension(600, 50));
JLabel lblSouth = new JLabel();
lblSouth.setPreferredSize(new Dimension(600, 50));
pnlCenter = new JPanel();
pnlCenter.setBackground(Color.black);
pnlCenter.setLayout(new java.awt.GridLayout(3, 0, 10, 10));
pnlCenter.setPreferredSize(new Dimension(600, 400));
pnlCenter.add(pnl1);
pnlCenter.add(pnl2);
pnlCenter.add(pnl3);
frame = new JFrame();
frame.add(pnlCenter, BorderLayout.CENTER);
frame.add(lblNorth, BorderLayout.NORTH);
frame.add(lblSouth, BorderLayout.SOUTH);
frame.add(lblWest, BorderLayout.WEST);
frame.add(lblEast, BorderLayout.EAST);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(100, 100);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
GridBadFrame gridBadFrame = new GridBadFrame();
}
});
}
}
это на самом деле граница среднего JPanel
Если это граница, уберите это (setBorder(null)
).
Я думаю, что если вы попробуете setBorderPainted(false), это может избавить от нежелательной границы.
Проблема, вероятно, связана с предпочтительными высотой и шириной, установленными GridLayout на JPanel.
Выдержка из документации:
Предпочтительная ширина компоновки сетки - это наибольшая предпочтительная ширина любого из компонентов в контейнере, умноженная на число столбцов, плюс горизонтальное заполнение, умноженное на количество столбцов плюс один, плюс левая и правая вставки целевого контейнера.
Предпочтительной высотой расположения сетки является наибольшая предпочтительная высота любого из компонентов в контейнере, умноженная на число рядов, плюс вертикальное заполнение, умноженное на число рядов плюс один, плюс верхняя и нижняя вставки целевого контейнера.