在 JPanel 中看不到 JLayeredPane 中的内容

Cannot see the contents in the JLayeredPane in a JPanel

我正在尝试创建一个棋盘 class,它扩展 JPanel 用于西洋双陆棋游戏和 JLayeredPane 来为我的跳棋创建拖动区域,但我什至无法在面板上打印一个简单的矩形。它打印图像但不打印 JLabel。 这是我的 JPanel class

public class BoardPanel extends JPanel{

private JLayeredPane lp;

private BufferedImage imageBoard;
private final int WIDTH = 1000;
private final int HEIGHT = 800;

private ArrayList<Slot> slotSet1;
private ArrayList<Slot> slotSet2;
private ArrayList<Slot> slotSet3;
private ArrayList<Slot> slotSet4;
private CheckerSet ch1;
public  Checker chc;

public BoardPanel(){

    initComponents();

}

private void initComponents(){

    lp = new JLayeredPane();

    setPreferredSize(new java.awt.Dimension(1500, 1000));

    //lp.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
    lp.setBorder(javax.swing.BorderFactory.createTitledBorder("asdadsaddadsadasdadsa"));
    lp.setMaximumSize(new java.awt.Dimension(1124, 904));
    lp.setMinimumSize(new java.awt.Dimension(1124, 904));


    try {
       imageBoard = ImageIO.read(getClass().getResource("/images/board.jpg"));
   } catch (IOException e) {
       System.out.println("file error");
   }

        JLabel label = new JLabel();
        label.setVerticalAlignment(JLabel.TOP);
        label.setHorizontalAlignment(JLabel.CENTER);
        label.setOpaque(true);
        label.setBackground(Color.BLACK);
        label.setForeground(Color.black);
        label.setBorder(BorderFactory.createLineBorder(Color.black));
        label.setBounds(0, 0, 50, 50);

    lp.add(label,JLayeredPane.DEFAULT_LAYER);


}
public void paintComponent(Graphics g){

    //g.drawImage(imageBoard,0,0,null);

}

}

还有主要的

 public static void main(String[] args){

    JFrame f = new JFrame();

    //GamePanel gp = new GamePanel();
    BoardPanel gp = new BoardPanel();

    f.add(gp);

    //f.getContentPane().add(gamePanel);
    f.setSize(new Dimension(1500, 1000));
    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

我该如何解决?谢谢大家

您必须向 JLayeredPane 添加布局,例如 GridLayout。试试这个:

GridLayout gl = new GridLayout(20, 21);
lp.setLayout(gl);

初始化后 lp。然后你可以将你需要的所有组件添加到 GridLayout,例如 lp:

gl.add(lp)

布局将管理事物的显示方式;在这种情况下,它将填充 GridLayout 中的网格,首先是第一行(存在 20 行),然后是第二行,依此类推(我认为您实际上不需要 20 行,就像我的示例代码)