Как добавить пользовательские декорации (кнопки "закрыть", "свернуть" и прочие) для JFrame?

Что я сделал

У меня есть JFrame, выполненная в определённом стиле, отличающемся от стиля панельки с кнопками. Я вызываю setUndecorated(true), после чего добавляю наверх свою панель, на которую устанавливаю слушатель события mouseDragged и т. д.:

MouseAdapter adapter=new MouseAdapter() {
    int x, y;
    public void mousePressed(MouseEvent e) {
        x = e.getXOnScreen();
        y = e.getYOnScreen();
    }
    public void mouseDragged(MouseEvent e) {
        frame.setLocation(e.getXOnScreen() - x, e.getYOnScreen() - y);
        x = e.getXOnScreen();
        y = e.getYOnScreen();
    }
};
panel.addMouseListener(adapter);

Результат

По итогу у меня есть окошко, которое можно двигать за вернхнюю панель. Двигаю её в самый верх экрана (на Windows) и...
...ничего не происходит. Потому что управление рамкой реализовано вручную, а не с помощью нативных механизмов. Обратите внимание, что стандартные рамки в Windows при их вытаскивании наверх разворачиваются на полный экран.

Вопрос

Как заменить панельку с кнопками на свою так, чтобы притом все функции ОС, связанные с окнами (например, возможность двигать окно с помощью Win + arrow), сохранялись? Ручная реализация всех функций не пойдёт - на разных ОС разные функции.


Ответы (0 шт):