MigLayout, почему эта ячейка использует дополнительное пространство?

У меня есть эта панель, которая использует MigLayout для создания ячеек для моего контента. Вот часть кода:

/ ====Layout====
        setLayout(new MigLayout("hidemode 3", "[400][0][400]", "[][][][][][]"));

        Border border = BorderFactory.createLineBorder(Color.WHITE, 0);
        //setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.gray));
        // ====Components====

        // ===Information Displays===
        JLabel invName = new JLabel("inventory name");
        invName.setBorder(border);
        invName.setEnabled(false);
        add(invName, "cell 0 0, growx");
        JTextField displayName = new JTextField("display name");
        add(displayName, "cell 0 1, growx");
        JComboBox category = new JComboBox();
        category.setEditable(true);
        category.setModel(new DefaultComboBoxModel<>(new String[] {"Tops", "Skirts", "Pants", "Dresses", "Shorts"}));
        add(category, "cell 0 2, growx");
        JButton updateFields = new JButton("Update");
        add(updateFields, "cell 0 3");
        JLabel itemsLabel = new JLabel("Items in this Outfit:");
        itemsLabel.setBorder(border);
        add(itemsLabel, "cell 0 4, bottom, growy");
        JList<String> itemsInOutfit = new JList<>();
        itemsInOutfit.setVisibleRowCount(8);
        itemsInOutfit.setModel(new AbstractListModel<String>() {
            String values[] = {"item 1",
                                "item 2",
                                "item 3",
                                "item 4",
                                "item 5",
                                "item 6",
                                "item 7",
                                "item 8",
                                "item 9",
                                "item 10"
                                };
            @Override
            public int getSize() {
                return values.length;
            }

            @Override
            public String getElementAt(int index) {
                return values[index];
            }
        });
        JScrollPane scrollPane = new JScrollPane(itemsInOutfit);
        add(scrollPane, "cell 0 5, growx, bottom");
        JButton goToItem = new JButton("Go to Item");
        add(goToItem,"cell 0 6");

        // ===Items in Outfit JList===

        // ===Picture Box===

                // ---Picture Box buttons---

                JToolBar picturesBar = new JToolBar();

                JButton leftArrowBtn = new JButton();
                leftArrowBtn.setToolTipText("Previous Image");
                //leftArrowBtn.setIcon(new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/back.svg"));
                picturesBar.add(leftArrowBtn);

                JButton rightArrowBtn = new JButton();
                rightArrowBtn.setToolTipText("Next Image");
                //rightArrowBtn.setIcon(new FlatSVGIcon("com/formdev/flatlaf/demo/icons/forward.svg"));
                picturesBar.add(leftArrowBtn);

                JButton addImageBtn = new JButton();
                addImageBtn.setToolTipText("Add Image");
                addImageBtn.setIcon(UIManager.getIcon("Tree.openIcon"));
                picturesBar.add(addImageBtn);

                JButton deleteImageBtn = new JButton();
                deleteImageBtn.setToolTipText("Delete Image");
                deleteImageBtn.setIcon(UIManager.getIcon("Tree.openIcon"));
                picturesBar.add(deleteImageBtn);
                picturesBar.setFloatable(false);
                add(picturesBar, "cell 2 6, bottom, span");

                // ---Picture Box Display---
                JLabel pictureGallery = new JLabel();
                pictureGallery.setBorder(border);
                pictureGallery.setIcon(new ImageIcon(new ImageIcon("C:/users/saman/documents/projects/MyCloset/src/main/resources/the_storm_couple.jpg").getImage().getScaledInstance(400, -1, Image.SCALE_DEFAULT)));
                add(pictureGallery,"cell 2 0, span 1 6");

А вот как это визуализируется:

Я хочу, чтобы метка «Предметы в этом наряде:» располагалась прямо над JList. Однако ячейка с JList является «большой», поэтому моя попытка указать метке выровнять нижнюю часть и пройти по этому списку не удалась. Я пытался вручную установить высоту строк и компонентов, когда добавляю их на панель с кодом ячейки. Кажется, ничего не работает. И я также не могу понять, как поместить границу в каждую ячейку, просто чтобы подтвердить свои подозрения, что на самом деле проблема заключается в том, что ячейка JList является высокой.

Что я делаю неправильно здесь, как я могу это исправить?

Спасибо!


person ssteph    schedule 09.06.2020    source источник


Ответы (1)


я бы предложил

setLayout(new MigLayout("hidemode 3", "[400][0][400]", "[][][][]push[][]"));

и удалите , bottom, Grovy для ваших элементов Label.

Я не проверял это, поэтому без гарантии ;-) Также может помочь добавление отладки:

new MigLayout("debug, hidemode 3", ...
person Anthony    schedule 10.06.2020
comment
это сработало! и спасибо также за синтаксис отладки, который уже стал спасением для другой панели, с которой у меня были проблемы. - person ssteph; 11.06.2020