向 JPanel 添加仅调用 onload 的侦听器

Add listener to JPanel that will be only called onload

好吧,问题很简单:

在 C# WinForms 中,您在 Winform 上获得了一个名为 onload > onload winforms 的侦听器。
这也是我想在我的 JPanel 中创建的,因为我想用数据库中的数据填充我的 JList。

我尝试使用 MouseMotionListener,但随后我需要一个定时器来控制对数据库的 select 语句,否则他会使用 select 语句向数据库发送垃圾邮件。

我得到了这个代码来切换面板:

public void changePanel(String panelRef) {
    ((CardLayout) (getContentPane().getLayout())).show(getContentPane(), panelRef);
}

面板已实例化并添加到 JFrame 中。

我看到您正在使用 CardLayout,并且您想知道卡片何时可见。您可以在面板上使用 HierarchyListener。

监听面板可见的基本代码是:

@Override
public void hierarchyChanged(HierarchyEvent e)
{
    JComponent component = (JComponent)e.getSource();

    if ((HierarchyEvent.SHOWING_CHANGED & e.getChangeFlags()) != 0
    &&  component.isShowing())
    {
        // add code here
    }
}

FWIW,此方法在 Card Layout Focus 中使用,它是 CardLayout 的扩展,可在卡激活时提供附加功能。

尝试 ComponentListener 作为解决方法:

panel.addComponentListener(new ComponentAdapter() {
    boolean loaded = false;
    @Override
    public void componentShown(ComponentEvent ce) {
        if(loaded) {
          return;
        }
        loaded = true;
        //to do here
    }
});