gpt4 book ai didi

java - 如何根据焦点控件知道当前 "focused"是哪个顶层容器?

转载 作者:行者123 更新时间:2023-11-30 03:38:37 26 4
gpt4 key购买 nike

我有一个应用程序,它显示一个 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);
}
}

所以我想知道哪个 JPanel(A1、A2 或 A3)当前根据正在使用的 JComponent 来“聚焦”。一件重要的事情是我无法直接访问主框架中的所有控件,因为这些 JComponent 在我的应用程序中的其他位置定义为类。我可以修改它们,但我不能说“如果它是 C1 内的 textfield1,那么就是 A1”之类的内容。

我一直在阅读,到目前为止,我认为我要做的是实现一个 PropertyChangeListener (如焦点子系统文档中的 Tracking Focus Changes to Multiple Components 部分所示)来跟踪每个面板内控件的焦点,并然后将该信息发送到我的应用程序。

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

最佳答案

首先查看 KeyboardFocusManager#getFocusOwner要获取对焦点组件的引用,您需要循环访问每个父引用,直到它等于您的面板之一或父组件为 null

关于java - 如何根据焦点控件知道当前 "focused"是哪个顶层容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27281119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com