Рассмотрите возможность добавления JLabels к JPanel, которая использует GridLayout.Дайте каждому JLabel MouseListener и поменяйте местами ImageIcons на mousePress / mouseRelease или измените фон JLabel с помощью нажатия и отпускания.Если вы выберете последний путь, вам нужно убедиться, что для непрозрачного свойства JLabels установлено значение true, чтобы фоновые цвета отображались.
Затем для черных клавиш вы можете добавить вышеупомянутую JPanel к JLayeredPane и поверх этого добавить еще одну JPanel, которая содержит черные клавиши, которые функционируют таким же образом.
Также,вам нужно позаботиться о том, чтобы «воспроизвести» любые ноты в фоновом потоке, например, которые можно получить с помощью SwingWorker, чтобы не связывать поток событий Swing и полностью заморозить вашу программу.