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

Я поместил два компонента в JLayeredPane, но не могу сделать их видимыми.Вот довольно MCV код.Как мне увидеть мои JTextField и JLabel внутри layeredPane?

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EtchedBorder;

public class GUI extends JFrame {
    JFrame mainframe = new JFrame();
    JPanel centrejPanel = new JPanel();
    JTextField keyText;
    JLabel jLabel;

    public GUI() {

    mainframe.setLayout(new BorderLayout());
    mainframe.setSize(1200, 700);
    mainframe.getContentPane().add(centrejPanel, BorderLayout.CENTER);

    keyText = new JTextField("hello");
    keyText.setOpaque(false);
    keyText.setCaretColor(Color.BLACK);
    keyText.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
    jLabel = new JLabel("hello");
    jLabel.setFont(new Font("Palatino", Font.BOLD, 18));
    jLabel.setVerticalAlignment(JLabel.TOP);
    jLabel.setForeground(Color.GRAY);
    JLayeredPane layeredPane = new JLayeredPane();

    layeredPane.add(keyText, 1);
    layeredPane.add(jLabel, 0);

    centrejPanel.getRootPane().add(layeredPane);

    mainframe.setVisible(true);

    }

}


public class Main {

    public static void main(String[] args) {
        GUI gui = new GUI();
    }
}

1 Ответ

0 голосов
/ 07 октября 2018
//mainframe.setLayout(new BorderLayout());

Не требуется.Диспетчером макета по умолчанию на панели содержимого фрейма является BorderLayout.

//mainframe.getContentPane().add(centrejPanel, BorderLayout.CENTER);

Не добавляйте пустую панель на панель содержимого фрейма.Просто добавьте LayeredPane непосредственно на панель содержимого.

keyText.setBounds(0, 50, 100, 20);
...
jLabel.setBounds(0, 150, 100, 20);

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

//centrejPanel.getRootPane().add(layeredPane);

Не добавляйте многослойную панель в корневую панель.Даже не знаю, сработает ли это, но в любом случае панель содержимого просто покроет многоуровневую панель.

Прочтите раздел из учебника Swing по Использование контейнеров верхнего уровня , чтобы узнать, каквсе слои фрейма структурированы.

mainframe.add(layeredPane);

Просто добавьте многоуровневую панель непосредственно на панель содержимого фрейма.Прочитайте учебник Swing по Как использовать LayeredPane для получения дополнительной информации и рабочих примеров.

Всегда начинайте с примеров из учебника при изучении новой концепции или компонента.

...