0

我在这里阅读了一些类似的主题,但它们对我没有帮助。我的 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 以编程方式接收焦点?

谢谢!

4

1 回答 1

2

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

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

于 2013-09-05T17:44:32.653 回答