【问题标题】:How to move a JFrame when the taskbar position or size change? [duplicate]当任务栏位置或大小发生变化时如何移动 JFrame? [复制]
【发布时间】:2017-03-08 17:15:33
【问题描述】:

我有未装饰的 JFrame,无法调整大小并放置在屏幕的底部/中心。 JFrame 的高度为 100 像素,宽度为 1000 像素。 如果任务栏改变了他的位置,我想根据任务栏的新位置和大小来放置JFrame。

我已经知道如何将 JFrame 放置在任务栏的上方,只需要知道是否有任何方法可以“监听”此更改并自动设置 JFrame 的新位置。我正在使用 Eclipse 和 jdk 1.8

编辑:我不是在问关于监听屏幕的变化。是关于任务栏的变化。我可以处理屏幕变化。

【问题讨论】:

  • 不重复,因为我不需要屏幕分辨率。我在问任务栏

标签: java swing jframe taskbar


【解决方案1】:

Detect screen resolution change made by user (Java Listener?) 的答案似乎表明没有内置支持来检测对本机窗口系统的这种类型的更改。

其中一个答案建议使用JNAJNI 之类的东西来挂钩本机事件。不幸的是,他们没有提供任何有关要挂钩的底层 Windows 事件的信息。

另一种选择是运行一个后台线程,它会定期检查插图是否发生了变化,然后相应地调整JFrame 的位置。您需要调整轮询速率,但我怀疑您可以每秒执行几次,而不会损害系统性能。

【讨论】:

  • 感谢您的回答。我对使用后台线程检查插图也有同样的想法,但正如你所说,在不损害系统性能的情况下很难做到这一点。还想制作 4 个自定义 jframe 并在运行时创建或显示它们,但我不知道该怎么做,所以它似乎是自动的。
  • 我之前在 Swing 应用中使用过轮询,发现只要轮询频率合理,对性能几乎没有任何损害。我建议您尝试每 500 毫秒轮询一次作为起点,然后逐步降低到 200 毫秒(无论如何,低于 200 毫秒可能不会带来太多好处)
  • 最好的方法是什么?我是线程新手。我考虑了 TimerTask,但我怀疑它是否是一个好的解决方案
  • 我建议看看ScheduledThreadPoolExecutor。正如answer 所示,ScheduledThreadPoolExecutor(基本上)是Timer 的替代品,但它解决了Timer 的一些缺点。
猜你喜欢
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
相关资源
最近更新 更多