Вы должны сделать шаг назад и понять, как работает Swing.
Когда вы создаете JFrame, Swing использует виджет OS для фрейма. Строка заголовка, которую вы видите, является частью компонента ОС, и у вас нет прямого контроля над ней с помощью Swing. Вы можете скрыть заголовок (и границу) фрейма, используя setUndecorated (false), как предлагалось ранее. В этом случае вы потеряете все функции, связанные со строкой заголовка (перетаскивание и доступ ко всем кнопкам) и границей (изменение размера). Поэтому, если вам нужна какая-либо из этих функций, вам нужно воссоздать все это самостоятельно.
С другой стороны, вы можете использовать:
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
и Swing создаст для вас строку заголовка и Border и добавит обратно все стандартные функции. Поэтому, если вы хотите предотвратить перетаскивание, вам необходимо проверить JFrame на наличие всех его компонентов, чтобы найти компонент, представляющий строку заголовка. Когда вы найдете этот компонент, вы можете удалить MouseMotionListeners из компонента, чтобы предотвратить перетаскивание. Таким образом, строка заголовка все еще будет там, и кнопки будут активны, но перетаскивание будет отключено. Я полагаю, что проще добавить всю функциональность к неокрашенному каркасу.
Как вы уже поняли, JInternalFrame - это компонент, полностью написанный на Swing, поэтому у вас есть доступ к дочерним компонентам, что по сути и является подходом, который я предлагаю для JFrame.