Java Swing - 使用 BorderLayout 将 JLabel 居中

电bl00

我有一个作业,说明指定我需要两个标签在屏幕上居中(水平和垂直)。
我知道这个问题已经被问过很多次了,但是每当我搜索这个问题时,给出的解决方案通常是使用不同的布局管理器,比如 BoxLayout。但是,说明还指定我必须使用 BorderLayout。
最初我没有将标签添加到面板,而是直接将它们添加到框架中,但这不起作用,因此建议我将它们都放在 JPanel 上,但这也不起作用。

我的代码目前看起来像这样:

    JButton butSubmit = new JButton("Submit");
    JButton butReset = new JButton("Reset");

    JLabel nameAndReg = new JLabel("My details", SwingConstants.CENTER);
    JLabel errorMsg = new JLabel("The error message", SwingConstants.CENTER);
    nameAndReg.setForeground(Color.blue);

    JTextField redVal = new JTextField(3);
    JTextField greenVal = new JTextField(3);
    JTextField blueVal = new JTextField(3);

    JPanel butPanelSouth = new JPanel();
    JPanel butPanelNorth = new JPanel();
    JPanel labsPanel = new JPanel();

    butPanelSouth.add(redVal);
    butPanelSouth.add(greenVal);
    butPanelSouth.add(blueVal);
    butPanelSouth.add(butSubmit);
    butPanelNorth.add(butReset);
    labsPanel.add(nameAndReg, BorderLayout.CENTER);
    labsPanel.add(errorMsg, BorderLayout.CENTER);

    add(labsPanel, BorderLayout.CENTER);
    add(butPanelNorth, BorderLayout.NORTH);
    add(butPanelSouth, BorderLayout.SOUTH);

这就是它产生的结果:如何使“我的详细信息”和“错误消息”垂直和水平地位于窗口中间,一个在另一个下方,并且仍然使用 BorderLayout?当前结果

编辑:对不起,我意识到我不是很清楚。我得到的建议是“可能嵌套您的布局管理器,即在 JFrame 上的 BorderLayout 的中心放置一个 JPanel。”

安沙加

正如我在上面的评论中所说,当您说“说明还指定我必须使用BorderLayout时,您应该澄清什么意思

如果您的意思是您的内容窗格必须有一个BorderLayout,而其他面板可以有不同的布局(就像在您的代码中一样,因为您FlowLayout在子面板中使用了 a ),那么很容易解决您的问题。

您只需要在 a 中添加标签,JPanel该标签使用在中心对齐标签的布局,就像GridBagLayout这样。您的第一个标签将具有gridx = 0gridy = 0,第二个标签将具有gridx = 0gridy = 1您的第二个将正好低于第一个,您可以使用它insets来创建一些空白空间(在下面的代码中,我使用 5 个像素作为Insets.top)。

由于您labsPanel将在BorderLayout.CENTER,面板将占用您框架中的所有空白空间,并且GridBagConstrains.anchor默认值 ( GridBagConstrains.CENTER) 确保您的标签在您的labsPanel. 因此,标签将在框架的中间垂直和水平对齐,如下面的截图所示:

在此处输入图片说明

代码示例:

import java.awt.*;
import javax.swing.*;
public class Test
{
    public static void main (String [] a) {
        SwingUtilities.invokeLater (new Runnable () {
            @Override public void run () {
                createAndShowGUI ();
            }
        });
    }
    private static void createAndShowGUI () {
        JFrame frame = new JFrame ("Test");
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        frame.setContentPane (new MainPanel ());
        frame.pack ();
        frame.setLocationRelativeTo (null);
        frame.setVisible (true);
    }
}
class MainPanel extends JPanel
{
    public MainPanel () {
        super (new BorderLayout ());

        JLabel nameAndReg = new JLabel ("My details", SwingConstants.CENTER);
        JLabel errorMsg = new JLabel ("The error message", SwingConstants.CENTER);
        nameAndReg.setForeground(Color.blue);

        JPanel labsPanel = new JPanel (new GridBagLayout ());

        labsPanel.add (nameAndReg);

        GridBagConstraints c = new GridBagConstraints ();
        c.gridy = 1;
        c.insets = new Insets (5, 0, 0, 0);
        labsPanel.add (errorMsg, c);

        JButton butSubmit = new JButton("Submit");
        JButton butReset = new JButton("Reset");

        JTextField redVal = new JTextField(3);
        JTextField greenVal = new JTextField(3);
        JTextField blueVal = new JTextField(3);

        JPanel butPanelSouth = new JPanel ();
        JPanel butPanelNorth = new JPanel ();

        butPanelSouth.add (redVal);
        butPanelSouth.add (greenVal);
        butPanelSouth.add (blueVal);
        butPanelSouth.add (butSubmit);

        butPanelNorth.add (butReset);

        add (labsPanel, BorderLayout.CENTER);
        add (butPanelNorth, BorderLayout.NORTH);
        add (butPanelSouth, BorderLayout.SOUTH);
    }
}

如果您的所有面板都必须有一个BorderLayout,则很难实现您想要的,但正如我所说,这将是一个疯狂的要求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java Swing:BorderLayout中的SpringLayout

来自分类Dev

Java Swing:BorderLayout中的SpringLayout

来自分类Dev

在BorderLayout中使JLabel居中,行尾有一个按钮

来自分类Dev

Java Swing-使用Swing Timer类移动JLabel

来自分类Dev

使用BorderLayout和现有JScrollPane将Swing元素添加到JFrame

来自分类Dev

在 Java 中,有没有办法将一组大小可变的按钮居中(使用 Swing)?

来自分类Dev

与jlabel并排的BorderLayout

来自分类Dev

ImageLabel未在BorderLayout.NORTH中显示-Java Swing

来自分类Dev

BorderLayout中的Java Swing JList动态调整大小

来自分类Dev

java swing-JLabel不旋转

来自分类Dev

Swing GUI问题与BorderLayout

来自分类Dev

使用java Swing单击下一步时,图像未显示在JLabel上

来自分类Dev

Java:使用Timer将jLabel移动两次

来自分类Dev

Java Swing-JPanel居中问题

来自分类Dev

如何将JLabel和JTextField仅添加到BorderLayout中心的底部?

来自分类Dev

使用BorderLayout在Java中填充角落

来自分类Dev

如何使用NetBeans Gui Builder对JLabel进行居中?

来自分类Dev

JLabel 不居中

来自分类Dev

如何在已使用borderlayout布局的面板中居中放置对象

来自分类Dev

通过 java Swing 中的循环更新 Jlabel 文本?

来自分类Dev

Java swing gui更改jlabel的背景并使其重置

来自分类Dev

在BorderLayout中对齐JLabel和JTextField

来自分类Dev

使用Swing组件打印JTable和JLabel吗?

来自分类Dev

使用查询JAVA的多个Jlabel

来自分类Dev

使用查询JAVA的多个Jlabel

来自分类Dev

Java Swing BorderLayout使一个区域不可调整大小

来自分类Dev

使用Java Swing将点绘制为椭圆形

来自分类Dev

使用Java Swing将消息发送到JMS队列

来自分类Dev

如何将Java Swing组件大小设置为其封闭的父对象大小。例如:将JLabel大小设置为其封闭的JPanel大小。

Related 相关文章

  1. 1

    Java Swing:BorderLayout中的SpringLayout

  2. 2

    Java Swing:BorderLayout中的SpringLayout

  3. 3

    在BorderLayout中使JLabel居中,行尾有一个按钮

  4. 4

    Java Swing-使用Swing Timer类移动JLabel

  5. 5

    使用BorderLayout和现有JScrollPane将Swing元素添加到JFrame

  6. 6

    在 Java 中,有没有办法将一组大小可变的按钮居中(使用 Swing)?

  7. 7

    与jlabel并排的BorderLayout

  8. 8

    ImageLabel未在BorderLayout.NORTH中显示-Java Swing

  9. 9

    BorderLayout中的Java Swing JList动态调整大小

  10. 10

    java swing-JLabel不旋转

  11. 11

    Swing GUI问题与BorderLayout

  12. 12

    使用java Swing单击下一步时,图像未显示在JLabel上

  13. 13

    Java:使用Timer将jLabel移动两次

  14. 14

    Java Swing-JPanel居中问题

  15. 15

    如何将JLabel和JTextField仅添加到BorderLayout中心的底部?

  16. 16

    使用BorderLayout在Java中填充角落

  17. 17

    如何使用NetBeans Gui Builder对JLabel进行居中?

  18. 18

    JLabel 不居中

  19. 19

    如何在已使用borderlayout布局的面板中居中放置对象

  20. 20

    通过 java Swing 中的循环更新 Jlabel 文本?

  21. 21

    Java swing gui更改jlabel的背景并使其重置

  22. 22

    在BorderLayout中对齐JLabel和JTextField

  23. 23

    使用Swing组件打印JTable和JLabel吗?

  24. 24

    使用查询JAVA的多个Jlabel

  25. 25

    使用查询JAVA的多个Jlabel

  26. 26

    Java Swing BorderLayout使一个区域不可调整大小

  27. 27

    使用Java Swing将点绘制为椭圆形

  28. 28

    使用Java Swing将消息发送到JMS队列

  29. 29

    如何将Java Swing组件大小设置为其封闭的父对象大小。例如:将JLabel大小设置为其封闭的JPanel大小。

热门标签

归档