【问题标题】:How to focus JDialog programmatically?如何以编程方式聚焦 JDialog?
【发布时间】:2013-09-05 17:34:42
【问题描述】:

我在这里阅读了一些类似的主题,但它们对我没有帮助。 我的 JDialog 未装饰,最初无法聚焦:

super(connectionsTree.getMainFrame(), "", false);
        super.setUndecorated(true);
        super.setFocusableWindowState(false);
        super.setFocusable(false);
super.getContentPane().add(scrollPane);
        super.pack();

现在,只要此对话框可见并且用户使用 Space 按钮,我必须使 JDialog 聚焦,以便它接收关键事件。 我是这样做的:

if (keyCode == 32) {
            tooltip().setFocusable(true);
            tooltip().setFocusableWindowState(true);
            tooltip().requestFocusInWindow();
        }

此代码使我的 JDialog 可聚焦,但 JDialog 没有聚焦,并且它没有掌握关键事件。 tooltip() 方法只返回我的 JDialog 的实例。

如何让我的 JDialog 以编程方式获得焦点?

谢谢!

【问题讨论】:

  • 什么是tooltip()?它有什么作用?
  • 这个方法只返回我的 JDialog 实例,它应该通过 requestFocusInWindow() 方法接收焦点。

标签: java swing focus jdialog


【解决方案1】:

根据requestFocusInWindow()documentation,只有当顶级父组件是焦点所有者时,才会授予Component 的焦点。因此,如果您的主窗口没有关注它,这将不起作用。您应该改用Component#requestFocus()。 来自Component#requestFocus()的描述

请求该组件获得输入焦点,并且该组件的顶级祖先成为焦点窗口。

【讨论】:

  • @VolodymyrLevytskyi 如果它解决了你的问题,你应该接受这个答案;)
  • 我接受了。 requestFocusInWindow() 表示窗口内的组件获得焦点,而 requestFocus() 方法表示窗口本身获得焦点。
猜你喜欢
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
  • 1970-01-01
  • 2018-01-06
  • 2015-03-12
相关资源
最近更新 更多