【问题标题】:How to make a JFrame not movable?如何使 JFrame 不可移动?
【发布时间】:2018-02-15 16:23:21
【问题描述】:

问题

我想知道是否有可能使 JFrame 不可移动/不可拖动 - 只是出于好奇,而不是真正的用例。问题是操作系统的窗口管理器负责窗口的外观,但程序本身只有几个可能的设置。这就是我寻找黑客的原因。

我尝试过的

  • 删除了JFrame 的装饰,如this 答案中所述(但是,仍然可以移动窗口,例如在 GNU/Linux 上按住 ALT 键)
  • 设置一个ComponentListener,如果JFrame被移动,它会重置位置(但是,这看起来非常有问题,因为监听器只在拖动之后做出反应,但JFrame应该始终保持在同一个位置)
  • 创建了一个全屏JFrame,使其透明并添加了一个JPanel 来模拟一个窗口(但是,即使窗口最大化,仍然可以拖动窗口)
  • 改用JWindowJDialog(也不起作用)

有没有办法通过使用不同的方法或改进我的一种方法来实现所需的行为?

【问题讨论】:

  • 你考虑过启动画面吗?
  • 如果有黑客攻击,它将在某种原生解决方案中找到。 Java / Swing 的抽象级别太高了。
  • @MarsAtomic 你指的是选定的答案,这是 ops 的第二个建议吗?
  • @matt 启动画面不也是 JFrame 或 JWindow 吗?
  • @Mars Atomic 此解决方案与使用侦听器的解决方案具有相同的问题。这是小故障。

标签: java swing jframe jdialog jwindow


【解决方案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);
                }
            });

为我工作。

【讨论】:

  • 不幸的是,这也是非常有问题的,它只会在您释放鼠标后将窗口向后移动。但是窗口必须始终保持在同一位置。
  • 差不多了,如果你以前在父亲方法上像假一样返回更好。
猜你喜欢
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
相关资源
最近更新 更多