如何在 Swing 应用程序中找到具有焦点的 JComponent?

How to find the JComponent which has focus within a Swing application?

在 activating/deactivating 或 opening/closing 一些对话之后,我无法确定我的应用程序中的焦点所在的位置。

有没有一种方法可以安全地将事件传递到组件层次结构中,以便在焦点发生变化以及焦点发生变化时得到通知?

例如,在 Smalltalk 环境中,出于测试原因,您可以在 Window/SubPane(即 JComponent)级别上重新实现 #requestFocus,并在焦点所在的位置有一个调试语句。

你能在 Java 中做类似的事情吗?还是我缺少某种机制?

我不完全确定你想用它做什么,但为了回答你的问题,你可以为每个元素添加一个 FocusListener。然后使用 FocusGained 函数编写一个 avriable。

int focus = 0;
textField1.addFocusListener(new FocusListener() {
        @Override
    
        public void focusGained(FocusEvent e) {
            focus = 1;                    
        }
    
        @Override
        public void focusLost(FocusEvent e) {
            
        }
    });

textField2.addFocusListener(new FocusListener() {
        @Override
    
        public void focusGained(FocusEvent e) {
            focus = 2;                    
        }
    
        @Override
        public void focusLost(FocusEvent e) {
            
        }
    });

所以出现的罪魁祸首是调试工具提示。完全删除这些并添加 Steffi 的日志代码让我确信现在已经解决了。感谢大家,让我又学到了新东西