JLabel no se mostrará con JPanel.setLayout (nulo). ¿Por qué?

Quiero mostrar muchas etiquetas diferentes en un mapa, así que estoy usando un diseño nulo en mi panel y llamando a setLocation para cada etiqueta. Por alguna razón, sin embargo, las etiquetas no se muestran. Si quito el pan.setLayout (nulo), la etiqueta aparecerá en la parte superior central del panel. ¿Por qué el diseño nulo no funciona con setPosition?

package mapa;

import java.awt.*;
import javax.swing.*;

public class Mapa extends JFrame {
  private static JPanel pan;
  private static JLabel lab;

  public Mapa() {
  }

  private static void createAndShowGUI() {
    Mapa frame = new Mapa();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    lab = new JLabel("TEXTO");
    lab.setBackground(Color.black);
    lab.setForeground(Color.white);
    lab.setOpaque(true);
    lab.setVisible(true);

    pan = new JPanel();
    pan.setLayout(null);
    pan.setPreferredSize(new Dimension(640,480));
    pan.add(lab);
    lab.setLocation(100, 100);

    frame.getContentPane().add(pan, BorderLayout.CENTER);
    frame.pack();
    frame.setVisible(true);
  }

  public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        createAndShowGUI();
      }
    });
  }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta