将侦听器添加到将仅被称为onload的JPanel

时间:2015-01-08 22:00:18

标签: java swing actionlistener

问题很简单:

在C#WinForms中,你在Winform上有一个名为onload>的监听器。 onload winforms
这也是我想在我的JPanels中创建的,因为我想用数据库中的数据填充我的JList。

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

我有这个代码来切换面板:

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

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

2 个答案:

答案 0 :(得分:3)

我看到你正在使用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中使用,{{3}}是CardLayout的扩展,在卡片变为活动状态时提供额外的功能。

答案 1 :(得分:2)

尝试ComponentListener作为解决方法:

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