Как добавить пользовательские декорации (кнопки "закрыть", "свернуть" и прочие) для 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), сохранялись? Ручная реализация всех функций не пойдёт - на разных ОС разные функции.