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

我刚刚在向 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));


}

但是,它们只是彼此相邻显示。我怎样才能让它们在彼此的正下方,就像在列表中一样?


拉风的咖菲猫
浏览 159回答 2
2回答

慕哥6287543

从在容器内布置组件开始。您不会被一个容器/布局困住,您可以将它们组合起来以生成复杂的 UI。在您的示例中,您尝试将多个组件添加到WEST容器的位置,但BorderLayout仅支持在其 5 个可用位置中的每个位置管理单个组件。此外,在大多数情况下,您应该在尝试将组件添加到容器之前设置布局管理器以下是使用复合组件/布局生成复杂 UI 的常用方法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"));        }    }}

紫衣仙女

您可以使用 BoxLayout 更多信息:https : //docs.oracle.com/javase/tutorial/uiswing/layout/box.htmlJPanel 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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java