Как добавить последовательность JLabels прямо друг под другом? - PullRequest
0 голосов
/ 18 октября 2018

Я только что столкнулся с некоторыми проблемами при добавлении последовательности JLabels в мой графический интерфейс.Например, мне нужно показать 9 JLabels слева от экрана прямо друг под другом.Вот что я получил до сих пор:

public MeatPanel () {

    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 ]

0 голосов
/ 18 октября 2018

Вы можете использовать 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);
0 голосов
/ 18 октября 2018

Начните с Размещение компонентов в контейнере .

Вы не застряли с одним контейнером / макетом, вы можете объединить их для создания сложных пользовательских интерфейсов.

В вашем примере вы пытаетесь добавить несколько компонентов в позицию WEST контейнера, но BorderLayout поддерживает управление только одним компонентом в каждом из 5 доступных местоположений.

Кроме того, в большинствеВ некоторых случаях следует установить диспетчер компоновки перед попыткой добавления компонентов в контейнер.

Ниже приведен общий подход к использованию составных компонентов / макетов для создания сложных пользовательских интерфейсов

Compound layout example.

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

    }

}
...