Невозможно уменьшить вертикальный разрыв между JLabels в Grid Layout - PullRequest
0 голосов
/ 01 апреля 2020

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

Кроме того, как я мог бы увеличить отступ между моими JLabels и JPanel. Спасибо

ОБНОВЛЕНИЕ: я попытался добавить фоновое изображение в JPanel вместо JLabel. Проблема в том, что ширина и высота не влияют. Это просто показывает мне длинную тонкую часть моего фонового изображения

 public CustomerProfile()
 {
    super("Customer Profile");
    setLayout(new BorderLayout());




    //BACKGROUND IMAGE OF THE PROFILE JPANEL

     ImageIcon backgroundImg= new ImageIcon("background.jpg");

    //background = new JLabel("",background_img,JLabel.CENTER);
    //background.setLayout(new BorderLayout());


    //PROFILE DETAILS JPANEL
    jpProfile = new JPanel() {

        @Override
        protected void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            g.drawImage(backgroundImg.getImage(),0,0,450,775,null);
        }


    };


    add(jpProfile, BorderLayout.WEST);
    //jpProfile.add(background);

    /*//PROFILE ICON
    ImageIcon profImg = new ImageIcon("female.png");
    jlProfileIcon = new JLabel("",profImg,JLabel.CENTER);

    //ADDING PROFILE ICON TO JLABEL background
    background.add(jlProfileIcon,BorderLayout.NORTH);

    //DEFINING FONT
    standardFont = new Font("Serif",Font.BOLD,20);

    //JLABELS FOR PROFILE INFO
    jlCusName = new JLabel("Name: ");
    jlCusName.setFont(standardFont);
    jlCusName.setForeground(Color.WHITE);

    jlCusAddr = new JLabel("Address: ");
    jlCusAddr.setFont(standardFont);
    jlCusAddr.setForeground(Color.WHITE);   

    jlCusEmail = new JLabel("Email: ");
    jlCusEmail.setFont(standardFont);
    jlCusEmail.setForeground(Color.WHITE);

    jlCusPhone = new JLabel("Phone: ");
    jlCusPhone.setFont(standardFont);
    jlCusPhone.setForeground(Color.WHITE);

    jlCusProblem = new JLabel("Problems: ");
    jlCusProblem.setFont(standardFont);
    jlCusProblem.setForeground(Color.WHITE);


    //JPANEL FOR PROFILE INFO
    jpProfileInfo = new JPanel();
    jpProfileInfo.setLayout(new GridLayout(5,1,0,0));

    jpProfileInfo.setOpaque(false);

    //ADDING JLABELS TO JPANEL
    jpProfileInfo.add(jlCusName);
    jpProfileInfo.add(jlCusAddr);
    jpProfileInfo.add(jlCusEmail);
    jpProfileInfo.add(jlCusPhone);
    jpProfileInfo.add(jlCusProblem);


    //ADDING JPANEL TO background JLABEL
    background.add(jpProfileInfo,BorderLayout.WEST);
*/
}


public static void main(String[] args)
{
    CustomerProfile cp = new CustomerProfile();
    cp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    cp.setSize(900,775);
    cp.setVisible(true);

   }
}

1 Ответ

1 голос
/ 01 апреля 2020

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

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

Таким образом, вы можете использовать панель-обертку:

JPanel labelPanel = news JPanel( new GridLayout(…) );
labelPanel.add(…);

JPanel wrapperPanel = new JPanel( new BorderLayout() );
wrapperPanel.add(labelPanel, BorderLayout.PAGE_START); // now the height is respected

background.add(wrapperPanel, BorderLayout.LINE_START); // now the width is respected
...