Как сделать JFrame неподвижным?

Эта проблема

Я хотел бы знать, можно ли сделать JFrame не движимый / перетаскиваемый - просто из любопытства, а не для реального случая использования. Проблема в том, что оконный менеджер операционной системы отвечает за внешний вид окон, но сама программа имеет только несколько возможных настроек. Вот почему я ищу взломать.

Что я пробовал

  • убрал украшение JFrame как указано в этом ответе (однако, все еще возможно перемещать окно, например, удерживая клавишу ALT в GNU/Linux)
  • установить ComponentListener который сбрасывает позицию, если JFrame перемещается (однако, это выглядит очень затруднительно, так как слушатель реагирует только после перетаскивания, но JFrame должен всегда оставаться на одной позиции)
  • создал полный экран JFrame, сделал его прозрачным и добавил JPanel для имитации окна (однако его можно перетаскивать, даже если оно развернуто)
  • использовал JWindow и JDialog вместо этого (также не работает)

Есть ли способ достичь желаемого поведения, используя другой подход или улучшив один из моих подходов?

1 ответ

private void formComponentMoved(java.awt.event.ComponentEvent evt) {                                    
       this.setLocationRelativeTo(null);
    }     

addComponentListener(new java.awt.event.ComponentAdapter() {
                public void componentMoved(java.awt.event.ComponentEvent evt) {
                    formComponentMoved(evt);
                }
            });

Работает для меня.

Другие вопросы по тегам