Сначала JPanel с фоновым изображением очень прост. Получите свою собственную панель из JPanel, добавьте поле Image. Переопределите метод paintComponent (), чтобы сделать drawImage (), используя изображение, хранящееся в поле.
Второй кнопки. Получите свою собственную кнопку, добавьте изображение в конструктор и используйте setIcon (), чтобы поместить ее на кнопку. используйте setPressedIcon (), ... и т. д., чтобы добавить дополнительные изображения для различных состояний кнопок.
Наконец, масштабирование, мне не ясно, что вы хотите. DrawImage () может масштабировать изображение, так что это не проблема. Вы можете расположить кнопки при изменении размера JPanel, добавив прослушиватель. Затем вы можете изменить положение кнопок, значения x, y должны быть рассчитаны как% ширины и высоты панели. Можно даже изменить масштаб кнопок, чтобы соотношение ширины и высоты совпадало с соотношением панелей.
Так что да, есть чистый способ сделать это.