import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

/** Menggambar pohon kontainer Swing tanpa membuka jendela nyata. */
public class HierarkiDemo {
    public static void main(String[] args) {
        JPanel panelTengah = new JPanel();
        panelTengah.add(new JLabel("Nama:"));
        panelTengah.add(new JButton("Simpan"));

        JPanel panelInduk = new JPanel();
        panelInduk.add(new JLabel("Aplikasi Data Siswa"));
        panelInduk.add(panelTengah);

        cetak(panelInduk, 0);
    }

    /** Cetak komponen dan seluruh anak-anaknya dengan indentasi bertingkat. */
    private static void cetak(java.awt.Container induk, int kedalaman) {
        System.out.println("  ".repeat(kedalaman) + induk.getClass().getSimpleName());
        for (var anak : induk.getComponents()) {
            if (anak instanceof java.awt.Container kontainerAnak) {
                cetak(kontainerAnak, kedalaman + 1);
            } else {
                System.out.println("  ".repeat(kedalaman + 1) + anak.getClass().getSimpleName());
            }
        }
    }
}
