Java 将监听器添加到JPanel,该监听器将仅被称为onload

Java 将监听器添加到JPanel,该监听器将仅被称为onload,java,swing,actionlistener,Java,Swing,Actionlistener,问题很直截了当: 在C#WinForms中,Winform上有一个名为onload>的侦听器 这也是我想在我的JPanel中创建的内容,因为我想用数据库中的数据填充我的JList 我尝试使用MouseMotionListener,但是我需要一个计时器来控制数据库中的select语句,否则他会用select语句向数据库发送垃圾邮件 我得到了开关面板的代码: public void changePanel(String panelRef) { ((CardLayout) (getConte

问题很直截了当:

在C#WinForms中,Winform上有一个名为onload>的侦听器
这也是我想在我的JPanel中创建的内容,因为我想用数据库中的数据填充我的JList

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

我得到了开关面板的代码:

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

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

我看到您正在使用CardLayout,您想知道什么时候可以看到卡。您可以在面板上使用分层侦听器

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

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

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

FWIW,这种方法是对
CardLayout
的扩展,在卡激活时提供附加功能。

尝试
ComponentListener
作为解决方法:

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

我不确定其他人,但对我来说,如果您提供更多细节、上下文和代码,这将有所帮助。对于istance,JPanel何时“加载”?事件是否会引发此事件?您是否正在交换视图,例如使用CardLayout?这取决于Java没有“加载”的概念。您可以使用构造函数,或者提供自己的“load”方法,当您想要执行加载时可以调用该方法action@HovercraftFullOfEels我编辑了这个问题