当前位置: 首页 > 知识库问答 >
问题:

将JLabel放置在彼此的下方

凌经赋
2023-03-14

对于我的应用程序,我正在创建一个脚本编辑器。目前,我在一个包含JLabels表示的JPanel中显示了行号。但是,当我添加新的JLabels来表示新的行号时,JLabels会出现在面板的中心,即使我设置了JLabelsSetVerticalAlignmentSetVerticalTextPosition。我想要它,以便标签将出现在彼此的下面。

JPanel类构造函数,它包含所有JLabels:

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);
}

将JLabels添加到JPanel的方法

public void increaseLineNumber() {
    lineCount++;

    JLabel tempLabel = new JLabel(String.valueOf(lineCount));
    tempLabel.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 15));

    tempLabel.setVerticalAlignment(JLabel.TOP);
    tempLabel.setHorizontalAlignment(JLabel.CENTER);
    tempLabel.setVerticalTextPosition(JLabel.TOP);

    revalidate();
    this.add(tempLabel);
}

添加新JLabels时的当前外观:

共有1个答案

葛越泽
2023-03-14

不要使用GridLayout。它会拉伸你的部件。如果使用boxlayout

boxlayout的一个方便类是box。你可以做

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

然后只需将标签添加到

box.add(label);
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);
            }
        });
    }
}
 类似资料:
  • 问题内容: 在给定的示例中,我想将文本移动到图像和形状下方。请帮我做。 在此示例中,JLable位于面板顶部。我想将其向下移动到图像/形状。 我尝试了,但是没有用。请告诉我我是否缺少什么。 问题答案: 考虑使用API​​的可用功能… 看一眼: 如何使用标签 例如…

  • 问题内容: 我希望两个div在包装div中彼此相邻。在这种情况下,绿色div的高度应确定包装纸的高度。 我如何通过CSS实现呢? 问题答案: 浮动一个或两个内部div。 浮动一格: 或者如果您同时浮动两个子元素,则需要鼓励包装器div包含两个浮动子元素,否则它会认为它是空的而不是在它们周围放置边框 浮动两个div:

  • 问题内容: 我正在使用NetBeans GUI构建器来处理我的布局(我对LayoutManagers很糟糕),并试图放置一个简单的JLabel,以使其始终(水平)居于其父JPanel内部。理想情况下,即使调整了JPanel的大小,这也将保持正确,但是,如果这是一个疯狂的编码,比第一次创建JPanel时居中就足够了。 我自己尝试处理布局已经很糟糕了,但是由于NetBeans GUI Builder自

  • 问题内容: 我有多个透明实例,我想彼此叠加(也称为Photoshop层)并烘焙成一个输出。我该怎么做呢? 问题答案: 我会说最好的选择是拍摄缓冲的图像,并创建一个附加图像,以便将一个对象附加到该图像上。然后,只需使用Graphics.drawImage()将它们放置在彼此的顶部。 因此,遵循以下原则:

  • 我有JPanel,它包含: JButton和JLabel,其中设置了图片 我想把按钮放在JLabel顶部的北中心位置。目前它的设置彼此相邻,我不知道如何覆盖JLabel。 我在这里尝试了许多解决方案,但是它似乎并不完全按照我想要的方式工作。谢谢! 更新:按钮放在JLabel的顶部,但不在里面。

  • 问题内容: 我试图将一系列JLabel放置在JPanel上的特定X和Y坐标上(并设置其高度和宽度)。无论我做什么,每个标签都会立即跳到上一个标签的右侧,并且具有与所有其他标签完全相同的尺寸。 现在,我的Jpanel位于网格布局中。我尝试了绝对布局(非法参数异常结果),自由设计(没有标签出现),流程布局(所有内容都被压缩到中间)以及其他一些内容。 不知道我需要做些什么才能使这项工作。有人可以帮忙吗?