为了账号安全,请及时绑定邮箱和手机立即绑定

如何在彼此下方添加 JLabel 序列?

如何在彼此下方添加 JLabel 序列?

拉风的咖菲猫 2021-11-24 15:54:37
我刚刚在向 GUI 添加一系列 JLabel 时遇到了一些问题。例如,我需要在屏幕左侧彼此下方显示 9 个 JLabel。这是我到目前为止得到的:公共肉类面板(){    JLabel label1 = new JLabel("Meat");    JLabel label2 = new JLabel("Bacon");    JLabel label3 = new JLabel("Capicola");    JLabel label4 = new JLabel("Hamburger");    JLabel label5 = new JLabel("Pepperoni");    JLabel label6 = new JLabel("Meatball");    JLabel label7 = new JLabel("Sausage");    JLabel label8 = new JLabel("Chicken");    JLabel label9 = new JLabel("Linguica");    add(label1, BorderLayout.WEST);    add(label2, BorderLayout.WEST);    add(label3, BorderLayout.WEST);    add(label4, BorderLayout.WEST);    add(label5, BorderLayout.WEST);    add(label6, BorderLayout.WEST);    add(label7, BorderLayout.WEST);    add(label8, BorderLayout.WEST);    add(label9, BorderLayout.WEST);    setLayout(new BorderLayout(9,0));}但是,它们只是彼此相邻显示。我怎样才能让它们在彼此的正下方,就像在列表中一样?
查看完整描述

2 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

在容器内布置组件开始。

您不会被一个容器/布局困住,您可以将它们组合起来以生成复杂的 UI。

在您的示例中,您尝试将多个组件添加到WEST容器的位置,但BorderLayout仅支持在其 5 个可用位置中的每个位置管理单个组件。

此外,在大多数情况下,您应该在尝试将组件添加到容器之前设置布局管理器

以下是使用复合组件/布局生成复杂 UI 的常用方法

//img1.sycdn.imooc.com//619defde0001160403610304.jpg

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.EventQueue;

import java.awt.GridLayout;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;


public class Test {


    public static void main(String[] args) {

        new Test();

    }


    public Test() {

        EventQueue.invokeLater(new Runnable() {

            @Override

            public void run() {

                JFrame frame = new JFrame();

                // This is just a filler

                frame.add(new JPanel() {

                    @Override

                    public Dimension getPreferredSize() {

                        return new Dimension(200, 200);

                    }

                });

                frame.add(new MenuPane(), BorderLayout.WEST);

                frame.pack();

                frame.setLocationRelativeTo(null);

                frame.setVisible(true);

            }

        });

    }


    public class MenuPane extends JPanel {


        public MenuPane() {

            setLayout(new GridLayout(0, 1));

            add(new JLabel("Meat"));

            add(new JLabel("Bacon"));

            add(new JLabel("Capicola"));

            add(new JLabel("Hamburger"));

            add(new JLabel("Pepperoni"));

            add(new JLabel("Meatball"));

            add(new JLabel("Sausage"));

            add(new JLabel("Chicken"));

            add(new JLabel("Linguica"));

        }


    }


}


查看完整回答
反对 回复 2021-11-24
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

您可以使用 BoxLayout 更多信息:https : //docs.oracle.com/javase/tutorial/uiswing/layout/box.html


JPanel panel= new JPanel();

BoxLayout boxlayout = new BoxLayout(panel, BoxLayout.X_AXIS);// from left to rigth  

panel.setLayout(boxlayout); 


JLabel label1 = new JLabel("Meat");

JLabel label2 = new JLabel("Bacon");

JLabel label3 = new JLabel("Capicola");

JLabel label4 = new JLabel("Hamburger");

...

panel.add(label1);

panel.add(label2);

panel.add(label3);

panel.add(label4);

...


frame.add(panel);


查看完整回答
反对 回复 2021-11-24
  • 2 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信