2017-01-03 2 views
1

J'ai un JPanel qui a un BoxLayout (axe des pages), et je veux mettre en place deux composants, l'un sur l'autre.BoxLayout ajouter marge gauche

enter image description here

Mon problème est la marge à gauche de la grande boîte de Lipsum, comment puis-je me débarrasser de cela? Si je n'ajoute pas les meilleurs composants, il n'y a pas de marge.

enter image description here

Voici mon code, la deuxième image est créée par ne pas ajouter 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); 

Cette classe étend JPanel et est ajouté à un JFrame, qui est tout simplement pack() « d

+2

'Voici mon code' - publiez un message [mcve] qui illustre le problème. Nous ne pouvons pas compiler/exécuter le code fourni. – camickr

Répondre

1

Bien que je ne puisse pas dire d'où vient le comportement observé, l'affichage attendu peut être obtenu en utilisant un JPanel intermédiaire pour conta dans votre étiquette, plutôt que d'ajouter le JLabel directement:

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

Je vais essayer, merci (dev machine hors de la batterie) –

1

Mon problème est la marge à gauche de la grande boîte de Lipsum, comment puis-je me débarrasser de cela?

Vous devez aligner les alignements de vos composants. C'est l'alignement "X" propriété de tous les composants doit être aligné à gauche.

Je devine que le JLabel est le centre aligné de sorte que vous devez utiliser:

descLabel.setAlignmentX(JLabel.LEFT_ALIGNMENT); 

Voir la section Fixing Alignment Problems du tutoriel Swing sur How to Use BoxLayout pour plus d'informations et des exemples.