帆软报表设计器源代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

51 lines
1.5 KiB

package com.fr.common.listener;
import com.fr.design.data.DesignTableDataManager;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;
import javax.swing.event.ChangeListener;
/**
* 管理数据集相关监听的注册
*
* 原本的监听生命周期注册与销毁:
*
* 创建时组件时进行注册,在模板关闭时进行销毁
* 但是在模板未关闭的这段时间,如果不断的打开和关闭某些弹窗,次数达到一定程度,会导致出现大量内存占用,除非此时关闭模板
*
* 改成以下模式:
*
* 当组件可见或者被添加到某个大组件 注册相关监听
* 当组件不可见或者被移除时 立即移除相关监听
* 及时清理无效监听,减少实时内存占用
*
*
* @author hades
* @version 11.0
* Created by hades on 2022/2/14
*/
public class ManageDsListenerRegisterListener implements AncestorListener {
private ChangeListener changeListener;
public ManageDsListenerRegisterListener(ChangeListener changeListener) {
this.changeListener = changeListener;
}
@Override
public void ancestorAdded(AncestorEvent event) {
DesignTableDataManager.addDsChangeListener(changeListener);
// 添加后 fire一下 更新数据
changeListener.stateChanged(null);
}
@Override
public void ancestorRemoved(AncestorEvent event) {
DesignTableDataManager.removeDsChangeLister(changeListener);
}
@Override
public void ancestorMoved(AncestorEvent event) {
// do nothing
}
}