2017-01-03 2 views
1

У меня есть JPanel с BoxLayout (осью страницы), и я хочу выложить два компонента, один поверх другого.BoxLayout добавление левого поля

enter image description here

Моя проблема заключается в поле слева от большого Lipsum коробки, как я могу избавиться от этого? Если я не добавлю верхние компоненты, маржи нет.

enter image description here

Вот мой код, то второе изображение создается не добавляя headerPanel:

JLabel commandLabel = new JLabel(command); 
    JLabel paramLabel = new JLabel(params); 
    JLabel descLabel = new JLabel("<html><body style='width: 200px;'>" + description + "</body></html>"); 
    Font baseFont = commandLabel.getFont(), commandFont, paramFont, descFont; 

    commandFont = baseFont.deriveFont(Font.BOLD); 
    paramFont = baseFont.deriveFont(Font.ITALIC); 
    descFont = baseFont.deriveFont(Font.PLAIN); 

    commandLabel.setFont(commandFont); 
    paramLabel.setFont(paramFont); 
    descLabel.setFont(descFont); 
    descLabel.setAlignmentX(LEFT_ALIGNMENT); 
    descLabel.setBorder(BorderFactory.createStrokeBorder(new BasicStroke())); 
    JPanel headerPanel = new JPanel(new FlowLayout(FlowLayout.LEADING)); 
     headerPanel.add(commandLabel); 
     headerPanel.add(paramLabel); 
    this.add(headerPanel); 
    this.add(descLabel); 

Этот класс расширяет JPanel, и добавляют к JFrame, который просто pack() «d

+2

'Вот мой код' - разместите надлежащую [mcve], которая демонстрирует проблему. Мы не можем скомпилировать/выполнить предоставленный код. – camickr

ответ

1

Хотя я не мог определить, откуда происходит наблюдаемое поведение, ожидаемый дисплей может быть достигнут с помощью промежуточного JPanel для конта в наклейке, а не добавляя JLabel непосредственно:

JLabel commandLabel = new JLabel(command); 
    JLabel paramLabel = new JLabel(params); 
    JLabel descLabel = new JLabel("<html><body style='width: 200px;'>" + description + "</body></html>"); 
    Font baseFont = commandLabel.getFont(), commandFont, paramFont, descFont; 

    commandFont = baseFont.deriveFont(Font.BOLD); 
    paramFont = baseFont.deriveFont(Font.ITALIC); 
    descFont = baseFont.deriveFont(Font.PLAIN); 

    commandLabel.setFont(commandFont); 
    paramLabel.setFont(paramFont); 
    descLabel.setFont(descFont); 
    descLabel.setAlignmentX(LEFT_ALIGNMENT); 
    descLabel.setBorder(BorderFactory.createStrokeBorder(new BasicStroke())); 
    JPanel headerPanel = new JPanel(new FlowLayout(FlowLayout.LEADING)); 
    JPanel descPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));// added 
    headerPanel.add(commandLabel); 
    headerPanel.add(paramLabel); 

    descPanel.add(descLabel);// added 

    this.add(headerPanel); 
    this.add(descPanel);// modified 
+0

Я попробую это, спасибо (dev машина из батареи) –

1

Моя проблема заключается в поле слева от большого Lipsum коробки, как я могу избавиться от этого?

Необходимо согласовать выравнивания компонентов. Это свойство выравнивания «X» всех компонентов должно быть выровнено влево.

Я предполагаю, что JLabel является центр выровнен так, что вам нужно использовать:

descLabel.setAlignmentX(JLabel.LEFT_ALIGNMENT); 

См Fixing Alignment Problems раздел из свинга учебника по How to Use BoxLayout для получения дополнительной информации и примеров.

Смежные вопросы