将JLabel放在彼此之下

时间:2014-02-13 18:07:04

标签: java swing jpanel jlabel

对于我的应用程序,我正在创建一个脚本编辑器。目前,我在包含JLabels代表的JPanel中显示行号。但是,当我添加新的JLabels来表示新的行号时,JLabels会显示在面板的中心,即使我设置JLabel's setVerticalAlignment和{{1 }}。我希望它能让标签出现在彼此之下。

包含所有JLabel的JPanel类构造函数:

setVerticalTextPosition

用于将JLabel添加到JPanel的方法:

public LineNumberPanel() {

    setPreferredSize(new Dimension(width, height));
    setLayout(new GridLayout(0, 1));

    //setup the label
    label = new JLabel(String.valueOf(lineCount));
    label.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 15));

    //setup the label alignment
    label.setVerticalAlignment(JLabel.TOP);
    label.setHorizontalAlignment(JLabel.CENTER);
    label.setVerticalTextPosition(JLabel.TOP);
    setAlignmentY(TOP_ALIGNMENT);

    add(label);
}

添加新JLabel时的情况如下:

enter image description here

2 个答案:

答案 0 :(得分:1)

请勿使用GridLayout。它会拉伸你的组件。如果您使用BoxLayout则不会

BoxLayout的便利类是Box。你可以做到

Box box = Box.createVerticalBox();
add(box);

然后只需将标签添加到box

即可
box.add(label);

示例

enter image description here

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

public class BoxLabels {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                Box box = Box.createVerticalBox();
                Font font = new Font("monospaced", Font.PLAIN, 11);

                JPanel sideBar = new JPanel();
                sideBar.setBackground(Color.BLACK);
                sideBar.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
                sideBar.add(box);

                JTextArea text = new JTextArea(15, 50);
                text.setMargin(new Insets(5, 5, 5, 5));
                text.setBackground(Color.darkGray);
                text.setForeground(Color.white);
                text.setFont(font);

                int count = 1;
                for (int i = 0; i < 10; i++) {
                    JLabel label = new JLabel(String.valueOf(count));
                    label.setFont(font);
                    label.setForeground(Color.GREEN);
                    box.add(label);
                    count++;
                }

                JPanel panel = new JPanel(new BorderLayout());
                panel.add(text);
                panel.add(sideBar, BorderLayout.WEST);

                JOptionPane.showMessageDialog(null, panel);
            }
        });
    }
}

How to use BoxLayout

查看更多Laying out Components Within a Container和其他布局管理器

答案 1 :(得分:0)

您应该尝试相应地设置标签的PreferedSize。不幸的是,您不清楚使用哪个LayoutManager。