Java 如何知道当前使用的是哪个顶部容器;聚焦;根据重点控制?

Java 如何知道当前使用的是哪个顶部容器;聚焦;根据重点控制?,java,swing,jpanel,focus,Java,Swing,Jpanel,Focus,我有一个应用程序,它显示一个JFrame,其中有几个JPanel(a)。每个JPanel A中都有一些控件,还有一些复杂的组件包含额外的控件。现在,我的应用程序需要知道JPanel a所包含的一组控件中的哪一个正在被使用,这样它就可以突出显示JPanel a 以下是一些代码作为示例: public class MyApp extends JFrame { private JPanel A1 = new JPanel(); private JPanel A2 = new JPane

我有一个应用程序,它显示一个JFrame,其中有几个JPanel(a)。每个JPanel A中都有一些控件,还有一些复杂的组件包含额外的控件。现在,我的应用程序需要知道JPanel a所包含的一组控件中的哪一个正在被使用,这样它就可以突出显示JPanel a

以下是一些代码作为示例:

public class MyApp extends JFrame
{
    private JPanel A1 = new JPanel();
    private JPanel A2 = new JPanel();
    private JPanel A3 = new JPanel();

    public MyApp()
    {
        // Add components to the layout, initialize things, etc
        ...

        // Lets suppose each JPanel has 2 components
        JComponent C1 = new JComponent();
        JComponent C2 = new JComponent();
        A1.add(C1);
        A1.add(C2);

        JComponent C3 = new JComponent();
        JComponent C4 = new JComponent();
        A2.add(C3);
        A2.add(C4);

        JComponent C5 = new JComponent();
        JComponent C6 = new JComponent();
        A3.add(C5);
        A4.add(C6);
    }
}
因此,我想知道的是,根据使用的JComponent,当前哪个JPanel(A1、A2或A3)是“重点”的。重要的一点是,我不能直接访问主框架中的所有控件,因为这些JComponent在我的应用程序的其他地方被定义为类。我可以修改它们,但我不能说“如果它是C1中的textfield1,那么它就是A1”

我一直在阅读,到目前为止,我认为我要做的是实现一个PropertyChangeListener(如本节所示,来自Focus子系统的文档),从每个面板内的控件跟踪焦点,然后将该信息发送到我的应用程序

有没有更好的方法来做到这一点,我不知道? 非常感谢。

首先看一看,以获得对聚焦组件的引用,然后循环遍历每个父引用,直到它等于您的一个面板或父引用为
null