Избавиться от разрыва между JPanels - PullRequest
4 голосов
/ 23 августа 2011

Вот моя проблема

enter image description here

Как мне избавиться от пробела во внутреннем прямоугольнике (это фактически граница среднего JPanel)?

Внешний прямоугольник представляет собой расширяемый JCompoment.Внутри он содержит три JPanel с.Каждый из них использует GridLayout.Я даже пытаюсь установить Hgap на отрицательное значение в большом прямоугольнике, но это ничего не меняет.

Редактировать: Извините, вопрос не ясен.Мне нужна граница, но я не хочу разрыва между внутренней границей и внешней границей.Если между ними нет промежутка, весь прямоугольник будет представлять класс диаграммы класса.

Ответы [ 4 ]

7 голосов
/ 23 августа 2011

Вы можете иметь в виду это:

enter image description here

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();
            }
        });
    }
}
2 голосов
/ 23 августа 2011

это на самом деле граница средней JPanel

Если это граница, удалите ее (setBorder(null)).

1 голос
/ 23 августа 2011

Я думаю, что если вы попытаетесь установить setBorderPainted (false), это может избавить от нежелательной границы.

0 голосов
/ 23 августа 2011

Проблема, вероятно, связана с предпочтительными высотой и шириной, установленными GridLayout на JPanel.

Выдержка из документации :

Предпочтительной шириной сетки является наибольшая предпочтительная ширина любой из компонентов в контейнере умножить на количество столбцов, плюс горизонтальные отступы количество столбцов плюс один плюс левая и правая вставки целевого контейнера.

Предпочтительной высотой расположения сетки является наибольшая предпочтительная высота любого из компонентов в контейнере умножить на количество строк, плюс вертикальное заполнение умноженное на количество строк плюс один плюс верхняя и нижняя вставки целевого контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...