我有一个CardDetailsPanel类,其中包含几个JLabelJTextField。此类包含在AddCardsPanel中,并按以下方式初始化:

    cardDetailsPanel = new CardDetailsPanel(true);
    add(cardDetailsPanel, java.awt.BorderLayout.CENTER);

我也有一个包含说明的JLabel。我想在首次出现CardDetailsPanel并将焦点更改为每个JTextField时更新此标签。我发现了addFocusListener()方法将在以后使用。但是,我的compenentShown()方法不适用于前者:
    addComponentListener(new java.awt.event.ComponentAdapter() {
        public void componentShown(java.awt.event.ComponentEvent evt) {
            formComponentShown(evt);
        }
    });

(好的,我知道这很丑。它是由NetBeans生成的。)
private void formComponentShown(java.awt.event.ComponentEvent evt) {
    this.frame = (BaseballFrame) this.getParent().getParent().getParent().getParent().getParent().getParent();
}

(是的,这更加丑陋。稍后我将处理链接的getParent()调用。我也想在这里做其他事情。)

那为什么我的听众不被打来电话呢?以及如何编写一个CardDetailsPanel出现在屏幕上时将执行某些操作的监听器?

最佳答案

按照 AncestorListener 中所述使用dialog focus

这就是祖先听众派上用场的地方。对于模式对话框中的组件,一旦该组件变为可见,就会触发该组件,并且实现且可聚焦。
编辑:
上面的注释适用于任何Swing容器中的组件,包括JFrame和JPanel

10-06 06:45