帆软报表设计器源代码。
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.

201 lines
6.6 KiB

package com.fr.quickeditor.cellquick;
import com.fr.design.actions.columnrow.DSColumnConditionAction;
import com.fr.design.dscolumn.DSColumnAdvancedEditorPane;
import com.fr.design.dscolumn.DSColumnBasicEditorPane;
import com.fr.design.dscolumn.ResultSetGroupDockingPane;
import com.fr.design.dscolumn.SelectedDataColumnPane;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ibutton.UIHeadGroup;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.cell.CellEditorPane;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.quickeditor.CellQuickEditor;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
/**
* 单元格元素 数据列编辑器
*
* @author yaoh.wu
* @version 2017年7月24日
* @since 9.0
*/
public class CellDSColumnEditor extends CellQuickEditor {
private JPanel dsColumnRegion;
private JPanel centerPane;
//数据集列选择组件
private SelectedDataColumnPane dataPane;
//数据分组设置组件
private ResultSetGroupDockingPane groupPane;
//过滤条件面板
private JPanel conditionPane;
// 基本和高级设置
private ArrayList<CellEditorPane> paneList;
// 基本和高级设置 卡片布局
private CardLayout card;
// 基本和高级设置 容器面板
private JPanel center;
// 卡片布局TAB切换按钮
private UIHeadGroup tabsHeaderIconPane;
// 分组设置监听器
private ItemListener groupListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e == null) {
//分组-高级-自定义点确定的时候传进来null的e,但是这时候应该触发保存
groupPane.update();
fireTargetModified();
return;
}
if (e.getStateChange() == ItemEvent.DESELECTED) {
if (!isEditing) {
return;
}
groupPane.update();
fireTargetModified();
}
}
};
//数据集列设置监听器
private ItemListener dataListener = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
if (!isEditing) {
return;
}
dataPane.update(cellElement);
fireTargetModified();
}
}
};
private CellDSColumnEditor() {
super();
}
/**
* Test Main
*
* @param args 参数
*/
public static void main(String[] args) {
JFrame jf = new JFrame("test");
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel content = (JPanel) jf.getContentPane();
content.setLayout(new BorderLayout());
content.add(new CellDSColumnEditor(), BorderLayout.CENTER);
GUICoreUtils.centerWindow(jf);
jf.setSize(220, 400);
jf.setVisible(true);
}
/**
* 创建面板占位
*
* @return JComponent 详细信息面板
*/
@Override
public JComponent createCenterBody() {
this.createPanes();
this.createSwitchTab();
dsColumnRegion = new JPanel(new BorderLayout());
dsColumnRegion.add(tabsHeaderIconPane, BorderLayout.NORTH);
dsColumnRegion.add(center, BorderLayout.CENTER);
centerPane = new JPanel(new BorderLayout());
centerPane.add(dsColumnRegion, BorderLayout.CENTER);
return centerPane;
}
/**
* 内容全部重新动态生成不然容易出错
* 刷新详细信息面板
*/
@Override
protected void refreshDetails() {
this.createPanes();
this.createSwitchTab();
dsColumnRegion = new JPanel(new BorderLayout());
dsColumnRegion.add(tabsHeaderIconPane, BorderLayout.NORTH);
dsColumnRegion.add(center, BorderLayout.CENTER);
//必须removeAll之后再添加;重新再实例化一个centerJPanel,因为对象变了会显示不出来
centerPane.removeAll();
centerPane.add(dsColumnRegion, BorderLayout.CENTER);
for (CellEditorPane cellEditorPane : paneList) {
cellEditorPane.populate(cellElement);
}
this.validate();
}
/**
* 关闭时候释放
*/
public void release() {
super.release();
dsColumnRegion = null;
centerPane = null;
}
/**
* 初始化基本和高级设置切换tab
*/
private void createSwitchTab() {
String[] iconArray = new String[paneList.size()];
card = new CardLayout();
center = new JPanel(card);
center.setBorder(BorderFactory.createEmptyBorder(10, 0, 0, 0));
for (int i = 0; i < paneList.size(); i++) {
CellEditorPane pane = paneList.get(i);
iconArray[i] = pane.getIconPath();
center.add(pane, pane.title4PopupWindow());
}
tabsHeaderIconPane = new UIHeadGroup(iconArray) {
@Override
public void tabChanged(int index) {
card.show(center, paneList.get(index).title4PopupWindow());
paneList.get(index).populate(cellElement);
}
};
tabsHeaderIconPane.setNeedLeftRightOutLine(false);
}
/**
* 刷新数据列基本和高级设置面板
*/
private void createPanes() {
paneList = new ArrayList<>();
/*基本设置面板*/
this.dataPane = new SelectedDataColumnPane();
this.groupPane = new ResultSetGroupDockingPane(tc);
double p = TableLayout.PREFERRED, f = TableLayout.FILL;
double[] rowSize = {p}, columnSize = {p, f};
UILabel uiLabel = new UILabel("filter");
UIButton uiButton = new UIButton();
if (tc != null) {
//第一次初始化时tc为空,引发NullPointerException
uiButton = new UIButton(new DSColumnConditionAction(tc));
}
Component[][] components = new Component[][]{
new Component[]{uiLabel, uiButton}
};
this.conditionPane = TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize);
dataPane.addListener(dataListener);
groupPane.addListener(groupListener);
paneList.add(new DSColumnBasicEditorPane(cellElement, dataPane, groupPane, conditionPane));
/*高级设置面板*/
paneList.add(new DSColumnAdvancedEditorPane());
}
}