Сосредоточьте две метки друг над другом вертикально - PullRequest
5 голосов
/ 03 августа 2011

Мне нужно создать два JLabel, и они должны быть расположены в центре и прямо друг над другом в JFrame.Я использую gridbaglayout из свинга, но я не могу понять, как это сделать.

terminalLabel = new JLabel("No reader connected!", SwingConstants.CENTER);  
terminalLabel.setVerticalAlignment(SwingConstants.TOP); 

cardlabel = new JLabel("No card presented", SwingConstants.CENTER); 
cardlabel.setVerticalAlignment(SwingConstants.BOTTOM);

Ответы [ 4 ]

8 голосов
/ 03 августа 2011

Используйте BoxLayout. В приведенном ниже коде класс Box является вспомогательным классом, который создает JPanel, который использует BoxLayout:

import java.awt.*;
import javax.swing.*;

public class BoxExample extends JFrame
{
    public BoxExample()
    {
        Box box = Box.createVerticalBox();
        add( box );

        JLabel above = new JLabel("Above");
        above.setAlignmentX(JLabel.CENTER_ALIGNMENT);
        box.add( above );

        JLabel below = new JLabel("Below");
        below.setAlignmentX(JLabel.CENTER_ALIGNMENT);
        box.add( below );
    }

    public static void main(String[] args)
    {
        BoxExample frame = new BoxExample();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }
}
2 голосов
/ 03 августа 2011

Использование FlowLayout и GridLayout

enclosingPanel = new JPanel();
enclosingPanel.setLayout( new FlowLayout( FlowLayout.CENTER) );
labelPanel = new JPanel();
labelPanel.setLayout( new GridLayout( 2 , 1 ) );  // 2 rows 1 column
enclosingPanel.add( labelPanel );
frame.add( enclosingPanel );  // frame = new JFrame();
setPreferredSize( new Dimension( 200 , 200) );
// do other things

Используя этот метод, вы можете поместить 2 JLabels в центре и друг под другом. Вы также можете установить вертикальный зазор между 2 метками. # GridLayout (int, int, int, int)

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

Вы должны использовать GridBagConstraints. Измените gridY значение ограничений при добавлении второй метки, и она будет размещена под первой.

Попробуйте это:

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(200, 200);
    frame.setLayout(new GridBagLayout());
    GridBagConstraints constraints = new GridBagConstraints();

    constraints.gridx = 0;
    constraints.gridy = 0;
    constraints.anchor = GridBagConstraints.CENTER;
    JLabel terminalLabel = new JLabel("No reader connected!");  
    frame.add(terminalLabel,constraints);

    constraints.gridy = 1;
    JLabel cardlabel = new JLabel("No card presented"); 
    frame.add(cardlabel,constraints);

    frame.setVisible(true);

Также прочитайте это: Как использовать GridBagLayout

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

Вы должны указать правильную привязку (CENTER) для GridBagCOnstraints, которые вы используете для добавления меток в контейнер.

...