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 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()); } }