如何以编程方式聚焦JDialog?

时间:2013-09-05 17:34:42

标签: java swing focus jdialog

我在这里读过一些类似的线程,但他们没有帮助我。 我的JDialog是未修饰的,最初是不可聚焦的:

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

现在每当这个对话框可见并且用户选择空格按钮时,我必须使该JDialog聚焦,以便它接收关键事件。 我是这样做的:

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

这段代码使我的JDialog可以集中精力,但JDialog没有集中精力,关键事件也没有被它掌握。 tooltip()方法只返回我的JDialog实例。

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

谢谢!

1 个答案:

答案 0 :(得分:2)

根据requestFocusInWindow()的{​​{3}},仅当顶级父组件是焦点所有者时,才会授予Component焦点。因此,如果您的主窗口没有关注它,这将无法工作。您应该使用Component#requestFocus()代替。 来自Component#requestFocus()说明

  

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

相关问题