WedX - журнал о программировании и компьютерных науках

jPanel не отображается внутри jLayeredPane

Перечитал все темы по этой проблеме, не могу понять в чем проблема.

Следующий код находится внутри метода, который вызывается при нажатии кнопки, кнопки были сгенерированы динамически, и да, отображается вывод консоли, поэтому метод вызывается.

    System.out.println("loaditems method"); 
    final JPanel panel = new JPanel();
    panel.setPreferredSize(new Dimension(436, 480));
    panel.setLayout(new FlowLayout(FlowLayout.LEFT,5,5));
    panel.setBackground(Color.gray);
    panel.setBorder(BorderFactory.createEtchedBorder(LOWERED, Color.lightGray, Color.gray));
    panel.setOpaque(false);
    panel.setLocation(jMainPanel.getLocation());
    panel.setVisible(true);
    jLayeredPane1.add(panel);
    jLayeredPane1.revalidate();

  • JLayeredPane по умолчанию использует нулевой макет. Таким образом, вы должны реализовать свой собственный LayoutManager, чтобы установить границы каждого компонента, расположенного в JLayeredPane. 07.03.2015
  • thelayeredpane показывает первую панель, на которой создаются кнопки, и при нажатии кнопки эта панель должна отображаться на той же панели 07.03.2015
  • Вам необходимо полностью указать положение и размер любого компонента, добавленного в JLayeredPane, а не предпочтительный размер. Но также вам нужно указать, к какому слою его добавить, чего вы не делаете. Что еще более важно, похоже, что вы должны использовать не JLayeredPane, а CardLayout. 07.03.2015

Ответы:


1

JLayeredPane по умолчанию использует нулевой макет. Таким образом, вы должны реализовать свой собственный LayoutManager, чтобы установить границы каждого компонента, расположенного в JLayeredPane.

См. этот пример:

import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.LayoutManager;
import java.awt.Rectangle;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;

import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestJLayeredPane {

    public static class AbsoluteLayoutManager implements LayoutManager {

        private Map<Component, Rectangle> bounds = new LinkedHashMap<Component, Rectangle>();

        @Override
        public void addLayoutComponent(String name, Component comp) {
            bounds.put(comp, new Rectangle(comp.getPreferredSize()));
        }

        @Override
        public void removeLayoutComponent(Component comp) {
            bounds.remove(comp);
        }

        @Override
        public Dimension preferredLayoutSize(Container parent) {
            Rectangle rect = new Rectangle();
            for (Rectangle r : bounds.values()) {
                rect = rect.union(r);
            }
            return rect.getSize();
        }

        @Override
        public Dimension minimumLayoutSize(Container parent) {
            return preferredLayoutSize(parent);
        }

        @Override
        public void layoutContainer(Container parent) {
            for (Entry<Component, Rectangle> e : bounds.entrySet()) {
                e.getKey().setBounds(e.getValue());
            }
        }

        public void setBounds(Component c, Rectangle bounds) {
            this.bounds.put(c, bounds);
        }
    }

    protected void initUI() {
        JFrame frame = new JFrame("test");
        AbsoluteLayoutManager layout = new AbsoluteLayoutManager();
        JLayeredPane layeredPane = new JLayeredPane();
        layeredPane.setLayout(layout);
        final JPanel panel = new JPanel();
        panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
        panel.setBackground(Color.gray);
        panel.setVisible(true);
        layeredPane.add(panel);
        layout.setBounds(panel, new Rectangle(17, 59, 436, 480));
        frame.add(layeredPane);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException,
            UnsupportedLookAndFeelException {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestJLayeredPane().initUI();
            }
        });
    }
}
07.03.2015
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]