我有一个CardDetailsPanel
类,其中包含几个JLabel
和JTextField
。此类包含在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
。