Como criar painéis expansíveis usando swing?

Gostaria de criar uma lista de painéis de expansão / recolhimento, como nesta imagem:

Não encontrei nenhum componente de giro para isso, então comecei a criar algo assim. Tentei colocar botões um sob o outro, que preenchem a largura disponível, mas realmente não funciona. Só consigo ver o último adicionado.

    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());

    panel.add(new JButton("Delphi Projects"), BorderLayout.NORTH);
    panel.add(new JPanel(), BorderLayout.NORTH); // hidden panel
    panel.add(new JButton("Delphi Projects | Delphi Files"), BorderLayout.NORTH);
    panel.add(new JPanel(), BorderLayout.NORTH); // hidden panel
    panel.add(new JButton("Other Files"), BorderLayout.NORTH);
    panel.add(new JPanel(), BorderLayout.NORTH); // hidden panel
    panel.add(new JButton("C++ Builder Projects | C++ Builder Files"), BorderLayout.NORTH);
    panel.add(new JPanel(), BorderLayout.NORTH); // hidden panel

    JScrollPane scroll = new JScrollPane(panel);

questionAnswers(3)

yourAnswerToTheQuestion