Fangjie Hu 8 years ago
parent
commit
6a85e9da7f
  1. 167
      designer_base/src/com/fr/design/gui/frpane/TreeSettingPane.java
  2. 102
      designer_base/src/com/fr/design/gui/frpane/tree/layer/config/LayerDataConfigPane.java
  3. 254
      designer_base/src/com/fr/design/gui/frpane/tree/layer/config/LayerDataControlPane.java
  4. 459
      designer_base/src/com/fr/design/gui/frpane/tree/layer/config/LayerDependenceSettingPane.java
  5. BIN
      designer_form/src/com/fr/design/form/images/download.png
  6. 36
      designer_form/src/com/fr/design/mainframe/ComponentTree.java
  7. 316
      designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java
  8. 175
      designer_form/src/com/fr/design/mainframe/FormWidgetDetailPane.java
  9. 14
      designer_form/src/com/fr/design/mainframe/ShareWidgetButton.java
  10. 11
      designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java
  11. 145
      designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java
  12. 9
      designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java
  13. 3
      designer_form/src/com/fr/design/mainframe/widget/wrappers/TreeModelWrapper.java
  14. 4
      designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java

167
designer_base/src/com/fr/design/gui/frpane/TreeSettingPane.java

@ -1,44 +1,52 @@
package com.fr.design.gui.frpane; package com.fr.design.gui.frpane;
import java.awt.BorderLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import com.fr.data.impl.TreeNodeWrapper;
import com.fr.design.data.DataCreatorUI;
import com.fr.design.gui.ilable.UILabel;
import javax.swing.*;
import com.fr.general.NameObject;
import com.fr.data.impl.TableDataDictionary; import com.fr.data.impl.TableDataDictionary;
import com.fr.data.impl.TreeAttr; import com.fr.data.impl.TreeAttr;
import com.fr.data.impl.TreeNodeAttr; import com.fr.data.impl.TreeNodeAttr;
import com.fr.data.impl.TreeNodeWrapper;
import com.fr.design.data.DataCreatorUI;
import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameObjectCreator;
import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.controlpane.NameableCreator;
import com.fr.design.gui.frpane.tree.layer.config.LayerDataControlPane;
import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itree.refreshabletree.TreeDataCardPane; import com.fr.design.gui.itree.refreshabletree.TreeDataCardPane;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.dialog.BasicPane;
import com.fr.form.ui.TreeComboBoxEditor; import com.fr.form.ui.TreeComboBoxEditor;
import com.fr.form.ui.TreeEditor; import com.fr.form.ui.TreeEditor;
import com.fr.form.ui.tree.LayerConfig;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.general.NameObject;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class TreeSettingPane extends BasicPane implements DataCreatorUI { public class TreeSettingPane extends BasicPane implements DataCreatorUI {
private JTreeControlPane controlPane; private JTreeControlPane controlPane;
private JTreeAutoBuildPane autoBuildPane; private JTreeAutoBuildPane autoBuildPane;
/**
* 新的分层构建方式
*/
private LayerDataControlPane layerDataControlPane;
private UIComboBox buildBox; private UIComboBox buildBox;
/** /**
* *
*/ */
private static final long serialVersionUID = 1762889323082827111L; private static final long serialVersionUID = 1762889323082827111L;
private String[] buildWay = new String[] { Inter.getLocText("FR-Designer_Layer-Build"), private String[] buildWay = new String[]{Inter.getLocText("FR-Designer_DataTable-Build"),
Inter.getLocText("FR-Designer_Auto-Build") }; Inter.getLocText("FR-Designer_Auto-Build"), Inter.getLocText("FR-Designer_Layer-Build")};
public TreeSettingPane(boolean isEditor) { public TreeSettingPane(boolean isEditor) {
this.initComponents(isEditor); this.initComponents(isEditor);
} }
private void initComponents(boolean isEditor) { private void initComponents(boolean isEditor) {
this.setLayout(FRGUIPaneFactory.createBorderLayout()); this.setLayout(FRGUIPaneFactory.createBorderLayout());
@ -58,18 +66,34 @@ public class TreeSettingPane extends BasicPane implements DataCreatorUI {
controlPane = new JTreeControlPane(new NameableCreator[] { treeNode }, controlPane = new JTreeControlPane(new NameableCreator[] { treeNode },
new TreeDataCardPane(), isEditor); new TreeDataCardPane(), isEditor);
autoBuildPane = new JTreeAutoBuildPane(); autoBuildPane = new JTreeAutoBuildPane();
this.add(buildWayPanel, BorderLayout.NORTH); layerDataControlPane = new LayerDataControlPane();
cardChanged(0); this.add(buildWayPanel, BorderLayout.NORTH);
} cardChanged(0);
}
private void cardChanged(int index) { private void cardChanged(int index) {
this.remove(controlPane); this.remove(controlPane);
this.remove(autoBuildPane); this.remove(autoBuildPane);
this.add(index == 0 ? controlPane : autoBuildPane, BorderLayout.CENTER); this.remove(layerDataControlPane);
validate(); switch (index) {
repaint(); case 0:
revalidate(); this.add(layerDataControlPane);
} break;
case 1:
this.add(autoBuildPane);
break;
case 2:
this.add(controlPane);
break;
default:
break;
}
validate();
repaint();
revalidate();
}
@Override @Override
protected String title4PopupWindow() { protected String title4PopupWindow() {
@ -101,10 +125,19 @@ public class TreeSettingPane extends BasicPane implements DataCreatorUI {
buildBox.setSelectedIndex(1); buildBox.setSelectedIndex(1);
TableDataDictionary dictionary = treeEditor.getDictionary(); TableDataDictionary dictionary = treeEditor.getDictionary();
autoBuildPane.populate(dictionary); autoBuildPane.populate(dictionary);
} else { } else if (treeEditor.isLayerBuild()) {
buildBox.setSelectedIndex(0); buildBox.setSelectedIndex(0);
} java.util.List<LayerConfig> layerConfigList = treeEditor.getLayerConfigs();
} LayerConfig[] layerConfigs = new LayerConfig[layerConfigList.size()];
int i = 0;
for (LayerConfig layerConfig : layerConfigList) {
layerConfigs[i++] = layerConfig;
}
this.layerDataControlPane.populate(new NameObject("tree", layerConfigs));
} else {
buildBox.setSelectedIndex(2);
}
}
/** /**
* 视图树的update * 视图树的update
@ -123,43 +156,46 @@ public class TreeSettingPane extends BasicPane implements DataCreatorUI {
te.setAutoBuild(true); te.setAutoBuild(true);
te.setDictionary(dictionary); te.setDictionary(dictionary);
te.setNodeOrDict(dictionary); te.setNodeOrDict(dictionary);
} else { } else if (buildBox.getSelectedIndex() == 2) {
te.setAutoBuild(false); te.setAutoBuild(false);
NameObject no = this.controlPane.update(); NameObject no = this.controlPane.update();
if (no != null) { if (no != null) {
TreeEditor editor = (TreeEditor) no.getObject(); TreeEditor editor = (TreeEditor) no.getObject();
te.setAllowBlank(editor.isAllowBlank()); te.setAllowBlank(editor.isAllowBlank());
te.setEnabled(editor.isEnabled()); te.setEnabled(editor.isEnabled());
te.setDirectEdit(editor.isDirectEdit()); te.setDirectEdit(editor.isDirectEdit());
te.setErrorMessage(editor.getErrorMessage()); te.setErrorMessage(editor.getErrorMessage());
te.setWidgetName(editor.getWidgetName()); te.setWidgetName(editor.getWidgetName());
te.setVisible(editor.isVisible()); te.setVisible(editor.isVisible());
te.setWaterMark(editor.getWaterMark()); te.setWaterMark(editor.getWaterMark());
te.setRemoveRepeat(editor.isRemoveRepeat()); te.setRemoveRepeat(editor.isRemoveRepeat());
te.setTreeAttr(editor.getTreeAttr()); te.setTreeAttr(editor.getTreeAttr());
te.setTreeNodeAttr(editor.getTreeNodeAttr()); te.setTreeNodeAttr(editor.getTreeNodeAttr());
te.setNodeOrDict(editor.getTreeNodeAttr()); te.setNodeOrDict(editor.getTreeNodeAttr());
te.setPerformanceFirst(editor.isPerformanceFirst()); te.setPerformanceFirst(editor.isPerformanceFirst());
} }
} }
return te; return te;
} }
/** /**
* 树节点属性的update * 树节点属性的update
* @return * @return
*/ */
public Object updateTreeNodeAttrs() { public Object updateTreeNodeAttrs() {
if(buildBox.getSelectedIndex() == 0) {
NameObject no = controlPane.update(); if (buildBox.getSelectedIndex() == 2) {
if (no != null) { NameObject no = controlPane.update();
return no.getObject(); if (no != null) {
return no.getObject();
} }
} else { } else if (buildBox.getSelectedIndex() == 0) {
return autoBuildPane.update(); return layerDataControlPane.update();
} } else {
return null; return autoBuildPane.update();
} }
return null;
}
/** /**
* 下拉树的update * 下拉树的update
@ -172,7 +208,7 @@ public class TreeSettingPane extends BasicPane implements DataCreatorUI {
tcb.setAutoBuild(true); tcb.setAutoBuild(true);
tcb.setDictionary(dictionary); tcb.setDictionary(dictionary);
tcb.setNodeOrDict(dictionary); tcb.setNodeOrDict(dictionary);
} else { } else if (buildBox.getSelectedIndex() == 2) {
tcb.setAutoBuild(false); tcb.setAutoBuild(false);
NameObject no = this.controlPane.update(); NameObject no = this.controlPane.update();
if (no != null) { if (no != null) {
@ -204,12 +240,15 @@ public class TreeSettingPane extends BasicPane implements DataCreatorUI {
*/ */
public void populate(Object nodeOrDict) { public void populate(Object nodeOrDict) {
if(nodeOrDict instanceof TreeNodeAttr[] || nodeOrDict instanceof TreeNodeWrapper) { if(nodeOrDict instanceof TreeNodeAttr[] || nodeOrDict instanceof TreeNodeWrapper) {
buildBox.setSelectedIndex(0); buildBox.setSelectedIndex(2);
NameObject no = new NameObject("name", nodeOrDict); NameObject no = new NameObject("name", nodeOrDict);
controlPane.populate(no); controlPane.populate(no);
} else if(nodeOrDict instanceof TableDataDictionary) { } else if(nodeOrDict instanceof TableDataDictionary) {
buildBox.setSelectedIndex(1); buildBox.setSelectedIndex(1);
autoBuildPane.populate((TableDataDictionary)nodeOrDict); autoBuildPane.populate((TableDataDictionary)nodeOrDict);
} } else if (nodeOrDict instanceof NameObject) {
} buildBox.setSelectedIndex(0);
layerDataControlPane.populate((NameObject) nodeOrDict);
}
}
} }

102
designer_base/src/com/fr/design/gui/frpane/tree/layer/config/LayerDataConfigPane.java

@ -0,0 +1,102 @@
package com.fr.design.gui.frpane.tree.layer.config;
import com.fr.base.TableData;
import com.fr.data.impl.TableDataDictionary;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.data.tabledata.wrapper.TableDataWrapper;
import com.fr.design.present.dict.TableDataDictPane;
import com.fr.form.ui.tree.LayerConfig;
import com.fr.form.ui.tree.LayerDependence;
import java.awt.*;
import java.util.*;
import java.util.List;
/**
* Created by juhaoyu on 16/9/13.
*/
public class LayerDataConfigPane extends BasicBeanPane<LayerConfig> {
/**
* 数据集数据字典选择panel
*/
private TableDataDictPane tableDataDictPane;
/**
* 与父级关联的字段选择
*/
private LayerDependenceSettingPane dependenceSettingPane;
/**
* 当前用户正在修改的LayerData
*/
private LayerConfig layerConfig;
public LayerDataConfigPane() {
//初始化组件及布局
this.tableDataDictPane = new TableDataDictPane();
this.dependenceSettingPane = new LayerDependenceSettingPane(tableDataDictPane);
this.setLayout(new BorderLayout(2, 2));
this.add(tableDataDictPane, BorderLayout.NORTH);
this.add(dependenceSettingPane, BorderLayout.CENTER);
}
/**
* 1.切换层级时
*
* @param layerConfig
*/
@Override
public void populateBean(LayerConfig layerConfig) {
if (layerConfig != null) {
this.layerConfig = layerConfig;
TableDataDictionary ta = layerConfig.getDictionary();
this.tableDataDictPane.populateBean(ta);
this.dependenceSettingPane.populate(layerConfig.getIndex(), layerConfig.getDependenceList());
}
}
@Override
public LayerConfig updateBean() {
if (layerConfig == null) {
return null;
}
//从下层panel中读取数据
TableData tableData = tableDataDictPane.updateBean().getTableData();
TableDataWrapper wrapper = tableDataDictPane.tableDataNameComboBox.getSelectedItem();
List<String> columnNames;
if (wrapper != null) {
columnNames = wrapper.calculateColumnNameList();
} else {
columnNames = new ArrayList<String>();
}
String viewColStr = tableDataDictPane.updateBean().getValueColumnName();
String modelColStr = tableDataDictPane.updateBean().getKeyColumnName();
TableDataDictionary dictionary = tableDataDictPane.updateBean();
int viewCol = columnNames.indexOf(viewColStr);
int modelCol = columnNames.indexOf(modelColStr);
//将数据设置到当前正在修改的layerData中
this.layerConfig.setDictionary(dictionary);
this.layerConfig.setModelColumn(modelCol);
this.layerConfig.setViewColumn(viewCol);
this.layerConfig.setTableData(tableData);
//添加依赖
java.util.List<LayerDependence> dependenceList = dependenceSettingPane.updateLayerDependence();
layerConfig.getDependenceList().clear();
layerConfig.addAll(dependenceList);
return layerConfig;
}
@Override
protected String title4PopupWindow() {
return "Layer Data Config Panel";
}
}

254
designer_base/src/com/fr/design/gui/frpane/tree/layer/config/LayerDataControlPane.java

@ -0,0 +1,254 @@
package com.fr.design.gui.frpane.tree.layer.config;
import com.fr.base.BaseUtils;
import com.fr.design.actions.UpdateAction;
import com.fr.design.gui.controlpane.ControlPane;
import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.itoolbar.UIToolbar;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.menu.ToolBarDef;
import com.fr.form.ui.tree.LayerConfig;
import com.fr.general.ComparatorUtils;
import com.fr.general.Inter;
import com.fr.general.NameObject;
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
/**
* Created by juhaoyu on 16/9/21.
*/
public class LayerDataControlPane extends ControlPane {
public static final String BEAN_NAME = "Tree Layer Data";
// 添加一个treeNode
private AddTreeNodeAction addTreeNode;
// 移除一个treeNode
private RemoveTreeNodeAction removeTreeNode;
private LayerDataConfigPane configPane;
private JTree tree;
private DefaultTreeModel defaultTreeModel;
public LayerDataControlPane() {
this.setLayout(new BorderLayout(2, 2));
//创建层编辑panel
configPane = new LayerDataConfigPane();
//创建树结构及树控件
JPanel leftPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(Inter.getLocText("FR-Designer_Root"));
defaultTreeModel = new DefaultTreeModel(rootNode);
tree = new JTree(defaultTreeModel);
DefaultMutableTreeNode firstLayer = new DefaultMutableTreeNode(new NameObject(Inter.getLocText("FR-Designer_Gradation") + 1, new LayerConfig(1)));
tree.setRootVisible(false);
((DefaultMutableTreeNode) defaultTreeModel.getRoot()).getLastLeaf().add(firstLayer);
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
leftPane.add(new UIScrollPane(tree), BorderLayout.CENTER);
tree.setPreferredSize(new Dimension(170, 350));
tree.setCellRenderer(renderer);
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
configPane.updateBean();
refreshCurrentUpdatePane();
checkButtonEnabled();
}
});
// JTreeControlPane控制栏
ToolBarDef toolbarDef = new ToolBarDef();
toolbarDef.addShortCut(addTreeNode = new AddTreeNodeAction());
toolbarDef.addShortCut(removeTreeNode = new RemoveTreeNodeAction());
UIToolbar toolBar = ToolBarDef.createJToolBar();
toolbarDef.updateToolBar(toolBar);
leftPane.add(toolBar, BorderLayout.NORTH);
this.add(leftPane, BorderLayout.WEST);
this.add(this.configPane, BorderLayout.CENTER);
defaultTreeModel.reload();
TreePath path = new TreePath(defaultTreeModel.getPathToRoot(rootNode.getLastLeaf()));
tree.setSelectionPath(path);
this.checkButtonEnabled();
}
public void refreshCurrentUpdatePane() {
TreePath selectTreePath = this.tree.getSelectionPath();
if (selectTreePath != null) {
NameObject object = (NameObject) ((DefaultMutableTreeNode) selectTreePath.getLastPathComponent()).getUserObject();
if (object != null && object.getObject() != null) {
configPane.populateBean((LayerConfig) object.getObject());
}
}
}
TreeCellRenderer renderer = new DefaultTreeCellRenderer() {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
if (leaf) {
this.setIcon(BaseUtils.readIcon("com/fr/design/images/data/default_widget.png"));
} else {
this.setIcon(BaseUtils.readIcon("com/fr/design/images/data/arrow_branch.png"));
}
if (value instanceof DefaultMutableTreeNode) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
Object userObj = node.getUserObject();
if (userObj instanceof NameObject) {
this.setText(((NameObject) userObj).getName());
}
}
this.setBorder(BorderFactory.createEmptyBorder(0, 0, 2, 0));
return this;
}
};
private void checkButtonEnabled() {
this.addTreeNode.setEnabled(true);
this.removeTreeNode.setEnabled(true);
// richer:当选择了树根节点时,不能被删除、上移和下移
DefaultMutableTreeNode root = (DefaultMutableTreeNode) defaultTreeModel.getRoot();
TreePath rootPath = new TreePath(defaultTreeModel.getPathToRoot(root));
if (ComparatorUtils.equals(rootPath, tree.getSelectionPath())) {
this.removeTreeNode.setEnabled(false);
}
}
private class AddTreeNodeAction extends UpdateAction {
public AddTreeNodeAction() {
this.setName(Inter.getLocText("FR-Designer_Add"));
this.setMnemonic('A');
this.setSmallIcon(BaseUtils.readIcon("/com/fr/base/images/cell/control/add.png"));
}
public void actionPerformed(ActionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) defaultTreeModel.getRoot();
DefaultMutableTreeNode innerNode = node;
int nodeCount = 0;
do {
nodeCount++;
} while ((innerNode = innerNode.getNextNode()) != null);
NameObject nameable = new NameObject(Inter.getLocText("FR-Designer_Gradation") + nodeCount, new LayerConfig(nodeCount));
node.getLastLeaf().add(new DefaultMutableTreeNode(nameable));
defaultTreeModel.reload();
TreePath path = new TreePath(defaultTreeModel.getPathToRoot(node.getLastLeaf()));
tree.setSelectionPath(path);
}
}
private class RemoveTreeNodeAction extends UpdateAction {
public RemoveTreeNodeAction() {
this.setName(Inter.getLocText("FR-Designer_Remove"));
this.setMnemonic('R');
this.setSmallIcon(BaseUtils.readIcon("/com/fr/base/images/cell/control/remove.png"));
}
public void actionPerformed(ActionEvent e) {
// TODO remove tree node
int val = JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("Utils-Are_you_sure_to_remove_the_selected_item") + "?",
Inter.getLocText("FR-Designer_Remove"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
if (val != JOptionPane.OK_OPTION) {
return;
}
TreePath selectionPath = tree.getSelectionPath();
DefaultMutableTreeNode tmpNode = (DefaultMutableTreeNode) selectionPath.getLastPathComponent();
tmpNode.removeFromParent();
defaultTreeModel.reload();
DefaultMutableTreeNode node = (DefaultMutableTreeNode) defaultTreeModel.getRoot();
TreePath path = new TreePath(defaultTreeModel.getPathToRoot(node.getLastLeaf()));
tree.setSelectionPath(path);
}
}
public void populate(NameObject nameObject) {
// 重新添加tree节点的时候需要remove掉原来的所有子节点
((DefaultMutableTreeNode) defaultTreeModel.getRoot()).removeAllChildren();
if (BEAN_NAME.equals(nameObject.getName())) {
Object obj = nameObject.getObject();
LayerConfig[] layerConfigs = null;
if (obj instanceof LayerConfig[]) {
layerConfigs = ((LayerConfig[]) obj);
}
int count = layerConfigs == null ? 0 : layerConfigs.length;
//将树的层次一层一层的加上去
DefaultMutableTreeNode node4root = (DefaultMutableTreeNode) defaultTreeModel.getRoot();
for (int i = 0; i < count; i++) {
DefaultMutableTreeNode node4add = new DefaultMutableTreeNode(
new NameObject(Inter.getLocText("FR-Designer_Gradation") + (i + 1), layerConfigs[i].clone()));
node4root.add(node4add);
node4root = node4add;
}
defaultTreeModel.reload();
expandAll(tree, true);
tree.setSelectionRow(0);
}
}
public NameObject update() {
return new NameObject(BEAN_NAME, updateLayerDatas());
}
private LayerConfig[] updateLayerDatas() {
//保存最后一个设置的层级
configPane.updateBean();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) defaultTreeModel.getRoot();
java.util.List<LayerConfig> nodeList = new ArrayList<LayerConfig>();
for (; root != null; root = root.getNextNode()) {
if (!(root.getUserObject() instanceof NameObject)) {
continue;
}
NameObject no = (NameObject) root.getUserObject();
if (no.getObject() instanceof LayerConfig) {
nodeList.add((LayerConfig) no.getObject());
}
}
return nodeList.toArray(new LayerConfig[nodeList.size()]);
}
@Override
protected String title4PopupWindow() {
return "Layer Data Control Pane";
}
}

459
designer_base/src/com/fr/design/gui/frpane/tree/layer/config/LayerDependenceSettingPane.java

@ -0,0 +1,459 @@
package com.fr.design.gui.frpane.tree.layer.config;
import com.fr.design.data.tabledata.wrapper.TableDataWrapper;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.present.dict.TableDataDictPane;
import com.fr.form.ui.tree.LayerDependence;
import com.fr.general.Inter;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.List;
/**
* Created by juhaoyu on 16/9/19.
*/
public class LayerDependenceSettingPane extends JPanel implements ItemListener {
/**
* 用户选择数据集的pane,在LayerDataConfigPane中传入
*/
private TableDataDictPane tableDataDictPane;
/**
* 添加依赖按钮
*/
private UIButton addButton;
/**
* 删除依赖按钮
*/
private UIButton delButton;
/**
* 依赖关系编辑Table
*/
private JTable dependenceTable;
/**
* Table的数据模型,两个按钮的操作直接对应于model
*/
private LayerDepenceTableModel model;
/**
* 当前该panel所设置的层级
*/
private int currentLayerIndex = 1;
private FieldRenderer fieldRenderer;
private LayerIndexEditor layerIndexEditor;
private FiledEditor fieldEditor;
public LayerDependenceSettingPane(TableDataDictPane tableDictPane) {
//关联数据集选择,并添加监听
this.tableDataDictPane = tableDictPane;
tableDataDictPane.tableDataNameComboBox.addItemListener(this);
//初始化按钮对象
addButton = new UIButton(Inter.getLocText("add"));
delButton = new UIButton(Inter.getLocText("Delete"));
//初始化Table对象,并添加renderer和editor
model = new LayerDepenceTableModel();
dependenceTable = new JTable();
dependenceTable.setModel(model);
//初始化辅助组件
fieldEditor = new FiledEditor(tableDataDictPane);
fieldRenderer = new FieldRenderer(tableDictPane);
layerIndexEditor = new LayerIndexEditor(currentLayerIndex);
//添加renderer
dependenceTable.getColumnModel().getColumn(0).setCellRenderer(new FirstRenderer());
dependenceTable.getColumnModel().getColumn(1).setCellRenderer(fieldRenderer);
//添加第一列editor
dependenceTable.getColumnModel().getColumn(0).setCellEditor(layerIndexEditor);
//添加第二列editor
dependenceTable.getColumnModel().getColumn(1).setCellEditor(fieldEditor);
//添加add按钮监听
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//先要停止编辑,然后再添加
fieldEditor.stopCellEditing();
layerIndexEditor.stopCellEditing();
LayerDependenceSettingPane.this.model.addDependence();
}
});
//添加del按钮监听
delButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (0 == dependenceTable.getSelectedRowCount()) {
return;
}
//获取视图索引,并根据视图索引获取model索引,删除model指定行
int selectedRow = dependenceTable.getSelectedRow();
int selectedRowModelIndex = dependenceTable.convertRowIndexToModel(selectedRow);
//先要停止编辑,然后再删除
fieldEditor.stopCellEditing();
layerIndexEditor.stopCellEditing();
model.delDependence(selectedRowModelIndex);
}
});
//生成布局
this.setLayout(new BorderLayout(2, 2));
//添加按钮panel
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout(2));
buttonPanel.add(addButton);
buttonPanel.add(delButton);
this.add(buttonPanel, BorderLayout.NORTH);
//添加Table的panel
JScrollPane tablePanel = new JScrollPane(dependenceTable);
this.add(tablePanel, BorderLayout.CENTER);
}
public void populate(int layerIndex, List<LayerDependence> dependenceList) {
this.currentLayerIndex = layerIndex;
//更新Editor
this.layerIndexEditor.layerChanged(layerIndex);
this.fieldEditor.layerChanged();
this.model.clear();
this.model.addAll(dependenceList);
}
public List<LayerDependence> updateLayerDependence() {
//保存现有编辑
this.fieldEditor.stopCellEditing();
this.layerIndexEditor.stopCellEditing();
return this.model.update();
}
/**
* 当tableDataDictPane变化时,调用该方法
*/
@Override
public void itemStateChanged(ItemEvent e) {
clearDependences();
}
/**
* 清楚当前设置的依赖关系
*/
private void clearDependences() {
this.model.clear();
}
/**
* 第一列renderer
*/
private static final class FirstRenderer extends UILabel implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value != null) {
//value是用户选择的字段索引值,从1开始的
this.setText(String.valueOf(value));
} else {
this.setText("");
}
if (hasFocus) {
this.setBorder(UIManager.getBorder("Table.focusCelHighlightBorder"));
} else {
this.setBorder(null);
}
return this;
}
}
/**
* 第二列renderer
* 由于从model中获取的数据是数据集列的索引值,这里要转换为列的名称
*/
private static final class FieldRenderer extends UILabel implements TableCellRenderer {
//用于将字段索引转换为字段名;保存改pane,是为了当用户选择其他数据集时,renderer可同步更新
private TableDataDictPane tableDataDictPane;
public FieldRenderer(TableDataDictPane tableDataDictPane) {
this.tableDataDictPane = tableDataDictPane;
}
/**
* 由于数据是从tableDataDictPane中现取的,所以用户选择不同的数据集时,renderer同步更新;
* 此时只需要在用户选择数据集时,刷新Table即可,不需要对renderer处理
*/
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value != null) {
List<String> columnNames = getColumnNameList(this.tableDataDictPane);
//value是用户选择的字段索引值,从1开始的
this.setText(columnNames.get(Integer.valueOf(String.valueOf(value))));
} else {
this.setText("");
}
if (hasFocus) {
this.setBorder(UIManager.getBorder("Table.focusCelHighlightBorder"));
} else {
this.setBorder(null);
}
return this;
}
}
/**
* 第一列editor
* 该editor于layerIndex关联,当用户选择不同的层时,这个editor要同步更新
*/
private static final class LayerIndexEditor extends AbstractCellEditor implements TableCellEditor {
private int currentLayerIndex;
private UIComboBox layerChoseCombobox = new UIComboBox();
public LayerIndexEditor(int currentLayerIndex) {
this.currentLayerIndex = currentLayerIndex;
for (int i = 1; i < currentLayerIndex; i++) {
layerChoseCombobox.addItem(i);
}
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
if (value != null) {
layerChoseCombobox.setSelectedIndex(Integer.valueOf(String.valueOf(value)) - 1);
}
return layerChoseCombobox;
}
@Override
public Object getCellEditorValue() {
return layerChoseCombobox.getSelectedItem();
}
public void layerChanged(int newLayerIndex) {
this.currentLayerIndex = newLayerIndex;
layerChoseCombobox.removeAllItems();
for (int i = 1; i < currentLayerIndex; i++) {
layerChoseCombobox.addItem(i);
}
}
}
/**
* 第二列editor
*/
private static final class FiledEditor extends AbstractCellEditor implements TableCellEditor {
private UIComboBox layerChoseCombobox = new UIComboBox();
TableDataDictPane tableDataDictPane;
public FiledEditor(TableDataDictPane tableDataDictPane) {
this.tableDataDictPane = tableDataDictPane;
List<String> columnNames = getColumnNameList(this.tableDataDictPane);
for (String columnName : columnNames) {
this.layerChoseCombobox.addItem(columnName);
}
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
List<String> columnNames = getColumnNameList(this.tableDataDictPane);
layerChoseCombobox.removeAllItems();
for (String columnName : columnNames) {
layerChoseCombobox.addItem(columnName);
}
if (value != null) {
layerChoseCombobox.setSelectedIndex(Integer.valueOf(String.valueOf(value)));
}
return layerChoseCombobox;
}
@Override
public Object getCellEditorValue() {
//转化为数据集的列索引(从0开始)
return layerChoseCombobox.getSelectedIndex();
}
public void layerChanged() {
List<String> columnNames = getColumnNameList(this.tableDataDictPane);
layerChoseCombobox.removeAllItems();
for (String columnName : columnNames) {
layerChoseCombobox.addItem(columnName);
}
}
}
private static List<String> getColumnNameList(TableDataDictPane tableDataDictPane) {
TableDataWrapper wrapper = tableDataDictPane.tableDataNameComboBox.getSelectedItem();
if (wrapper == null) {
return new ArrayList<String>();
} else {
return wrapper.calculateColumnNameList();
}
}
private static class LayerDepenceTableModel extends AbstractTableModel {
private List<LayerDependence> dependences;
public LayerDepenceTableModel() {
dependences = new ArrayList<LayerDependence>();
}
/**
* 添加一条数据,该方法会请求Table进行重绘(通过发送时间,告诉JTable数据更新,JTable会自动重绘)
*/
public void addDependence() {
dependences.add(new LayerDependence());
fireTableRowsInserted(dependences.size(), dependences.size());
}
/**
* 删除一条数据
*
* @param rowIndex
*/
public void delDependence(int rowIndex) {
if (rowIndex < 0 || rowIndex >= dependences.size()) {
return;
}
dependences.remove(rowIndex);
fireTableRowsDeleted(rowIndex + 1, rowIndex + 1);
}
public void addAll(List<LayerDependence> dependenceList) {
dependences.addAll(dependenceList);
fireTableRowsInserted(1, dependenceList.size());
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
@Override
public Class<?> getColumnClass(int column) {
return Integer.class;
}
@Override
public String getColumnName(int column) {
String name;
if (column == 0) {
name = Inter.getLocText("FR-Designer_layerIndex");
} else {
name = Inter.getLocText("FR-Designer_filedChosen");
}
return name;
}
@Override
public int getRowCount() {
return dependences.size();
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
LayerDependence dependence = dependences.get(rowIndex);
Object obj;
if (columnIndex == 0) {
obj = dependence.getLayerIndex();
} else {
obj = dependence.getThisColumnIndex();
}
return obj;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
LayerDependence dependence = dependences.get(rowIndex);
if (aValue != null) {
if (columnIndex == 0) {
dependence.setLayerIndex((Integer) aValue);
} else {
dependence.setThisColumnIndex((Integer) aValue);
}
}
}
public void clear() {
int length = dependences.size();
dependences.clear();
fireTableRowsDeleted(1, length);
}
public List<LayerDependence> update() {
return this.dependences;
}
}
}

BIN
designer_form/src/com/fr/design/form/images/download.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

36
designer_form/src/com/fr/design/mainframe/ComponentTree.java

@ -36,11 +36,8 @@ public class ComponentTree extends JTree {
this.setDropMode(DropMode.ON_OR_INSERT); this.setDropMode(DropMode.ON_OR_INSERT);
this.setTransferHandler(new TreeTransferHandler()); this.setTransferHandler(new TreeTransferHandler());
this.refreshTreeRoot(); this.refreshTreeRoot();
TreePath[] paths = getSelectedTreePath();
addTreeSelectionListener(designer); addTreeSelectionListener(designer);
setSelectionPaths(paths);
designer.addDesignerEditListener(new TreeDesignerEditAdapter());
this.addMouseListener(new MouseAdapter() { this.addMouseListener(new MouseAdapter() {
@Override @Override
@ -159,40 +156,7 @@ public class ComponentTree extends JTree {
return paths; return paths;
} }
private class TreeDesignerEditAdapter implements DesignerEditListener {
@Override
public void fireCreatorModified(DesignerEvent evt) {
if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) {
TreePath[] paths = getSelectedTreePath();
if (paths.length == 1) {
setAndScrollSelectionPath(paths[0]);
} else {
setSelectionPaths(paths);
}
} else if(evt.getCreatorEventID() == DesignerEvent.CREATOR_PASTED) {
ComponentTree.this.refreshUI();
TreePath[] paths = getSelectedTreePath();
if (paths.length == 1) {
setAndScrollSelectionPath(paths[0]);
} else {
setSelectionPaths(paths);
}
ComponentTree.this.repaint();
} else {
ComponentTree.this.refreshUI();
ComponentTree.this.repaint();
}
}
@Override
public boolean equals(Object o) {
return o.getClass() == this.getClass();
}
}
/** /**

316
designer_form/src/com/fr/design/mainframe/FormHierarchyTreePane.java

@ -1,12 +1,14 @@
package com.fr.design.mainframe; package com.fr.design.mainframe;
import java.awt.BorderLayout; import java.awt.*;
import java.awt.Component;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.Icon; import javax.swing.Icon;
import com.fr.design.actions.community.NeedAction;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.mainframe.widget.UITreeComboBox;
import com.fr.design.parameter.HierarchyTreePane; import com.fr.design.parameter.HierarchyTreePane;
import com.fr.design.designer.creator.XCreator; import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.creator.XWParameterLayout; import com.fr.design.designer.creator.XWParameterLayout;
@ -43,11 +45,13 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree
public static final int NODE_LENGTH = 2; public static final int NODE_LENGTH = 2;
public static final int PARA = 0; public static final int PARA = 0;
public static final int BODY = 1; public static final int BODY = 1;
private ComponentTree componentTree; private ComponentTree componentTree;
private UITreeComboBox treeComboBox;
private JPanel widgetPane = FRGUIPaneFactory.createBorderLayout_L_Pane();
// richer:搜寻树节点的的文本框 // richer:搜寻树节点的的文本框
private UITextField searchTextField; // private UITextField searchTextField;
private SearchResultPane searchResult; // private SearchResultPane searchResult;
public static FormHierarchyTreePane getInstance() { public static FormHierarchyTreePane getInstance() {
return HOLDER.singleton; return HOLDER.singleton;
@ -64,7 +68,7 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree
} }
private FormHierarchyTreePane() { private FormHierarchyTreePane() {
setLayout(new BorderLayout(0, 6)); setLayout(new BorderLayout(0, 0));
} }
@Override @Override
@ -86,8 +90,8 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree
*/ */
public void clearDockingView() { public void clearDockingView() {
this.componentTree = null; this.componentTree = null;
this.searchTextField = null; // this.searchTextField = null;
this.searchResult = null; // this.searchResult = null;
add(new JScrollPane(), BorderLayout.CENTER); add(new JScrollPane(), BorderLayout.CENTER);
} }
@ -103,53 +107,65 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree
return; return;
} }
componentTree = new ComponentTree(formDesigner); componentTree = new ComponentTree(formDesigner);
ComponentTreeModel treeModel = (ComponentTreeModel) componentTree.getModel(); ComponentTreeModel treeModel = (ComponentTreeModel) componentTree.getModel();
XCreator root = (XCreator)treeModel.getRoot(); XCreator root = (XCreator)treeModel.getRoot();
int childCount = treeModel.getChildCount(root); int childCount = treeModel.getChildCount(root);
//按照节点添加para在下的,但这里需要para节点在上,调整一下位置 //按照节点添加para在下的,但这里需要para节点在上,调整一下位置
if(childCount == NODE_LENGTH){ if(childCount == NODE_LENGTH){
adjustPosition(treeModel,formDesigner); adjustPosition(treeModel, formDesigner);
}
widgetPane.setBorder(BorderFactory.createEmptyBorder(3, 2, 3, 0));
add(widgetPane, BorderLayout.NORTH);
if(treeComboBox == null) {
widgetPane.add(new UILabel(Inter.getLocText("FR-Designer-Selected_Widget") + " ",
SwingConstants.HORIZONTAL), BorderLayout.WEST);
treeComboBox = new UITreeComboBox(componentTree);
widgetPane.add(treeComboBox, BorderLayout.CENTER);
add(widgetPane, BorderLayout.CENTER);
} }
UIScrollPane scrollPane = new UIScrollPane(componentTree);
scrollPane.setBorder(null);
add(scrollPane, BorderLayout.CENTER); // UIScrollPane scrollPane = new UIScrollPane(componentTree);
JPanel searchPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); // scrollPane.setBorder(null);
add(searchPane, BorderLayout.NORTH); // add(scrollPane, BorderLayout.CENTER);
searchPane.add(new UILabel(Inter.getLocText("FR-Designer_Search") + ":", // JPanel searchPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
SwingConstants.HORIZONTAL), BorderLayout.WEST); // add(searchPane, BorderLayout.NORTH);
searchTextField = new UITextField(); // searchPane.add(new UILabel(Inter.getLocText("FR-Designer_Search") + ":",
searchPane.add(searchTextField, BorderLayout.CENTER); // SwingConstants.HORIZONTAL), BorderLayout.WEST);
searchTextField.getDocument().addDocumentListener(new DocumentListener() { // searchTextField = new UITextField();
@Override // searchPane.add(searchTextField, BorderLayout.CENTER);
public void insertUpdate(DocumentEvent e) { // searchTextField.getDocument().addDocumentListener(new DocumentListener() {
search(); // @Override
} // public void insertUpdate(DocumentEvent e) {
// search();
@Override // }
public void removeUpdate(DocumentEvent e) { //
search(); // @Override
} // public void removeUpdate(DocumentEvent e) {
// search();
@Override // }
public void changedUpdate(DocumentEvent e) { //
search(); // @Override
} // public void changedUpdate(DocumentEvent e) {
// search();
private void search() { // }
String text = searchTextField.getText(); //
if (StringUtils.isEmpty(text)) { // private void search() {
removeSearchResult(); // String text = searchTextField.getText();
} else { // if (StringUtils.isEmpty(text)) {
populate(componentTree.search(text)); // removeSearchResult();
} // } else {
} // populate(componentTree.search(text));
}); // }
// }
// });
} }
/** /**
* 调整结构树para和body的位置 * 调整结构树para和body的位置
* *
* @param treeModel * @param treeModel
* @param formDesigner * @param formDesigner
*/ */
@ -176,114 +192,114 @@ public class FormHierarchyTreePane extends FormDockView implements HierarchyTree
/** /**
* 删除搜索结果 * 删除搜索结果
*/ */
public void removeSearchResult() { // public void removeSearchResult() {
componentTree.setSelectionPath(null); // componentTree.setSelectionPath(null);
if (searchResult != null) { // if (searchResult != null) {
this.remove(searchResult); // this.remove(searchResult);
} // }
} // }
//
public void populate(TreePath[] treepath) { // public void populate(TreePath[] treepath) {
if (this.searchResult == null) { // if (this.searchResult == null) {
searchResult = new SearchResultPane(); // searchResult = new SearchResultPane();
} // }
if (((BorderLayout) getLayout()).getLayoutComponent(BorderLayout.SOUTH) == null) { // if (((BorderLayout) getLayout()).getLayoutComponent(BorderLayout.SOUTH) == null) {
add(searchResult, BorderLayout.SOUTH); // add(searchResult, BorderLayout.SOUTH);
} // }
searchResult.populate(treepath); // searchResult.populate(treepath);
} // }
private class SearchResultPane extends JPanel { // private class SearchResultPane extends JPanel {
private UILabel resultLabel = new UILabel(); // private UILabel resultLabel = new UILabel();
private BackAction backAction = new BackAction(); // private BackAction backAction = new BackAction();
private ForWardAction forwardAction = new ForWardAction(); // private ForWardAction forwardAction = new ForWardAction();
private TreePath[] tree; // private TreePath[] tree;
private int number = 0; // private int number = 0;
//
SearchResultPane() { // SearchResultPane() {
this.setLayout(FRGUIPaneFactory.createBorderLayout()); // this.setLayout(FRGUIPaneFactory.createBorderLayout());
JPanel actionJPanel = FRGUIPaneFactory.createCenterFlowInnerContainer_S_Pane(); // JPanel actionJPanel = FRGUIPaneFactory.createCenterFlowInnerContainer_S_Pane();
addButtonToJPanel(actionJPanel, backAction.createToolBarComponent()); // addButtonToJPanel(actionJPanel, backAction.createToolBarComponent());
addButtonToJPanel(actionJPanel, forwardAction.createToolBarComponent()); // addButtonToJPanel(actionJPanel, forwardAction.createToolBarComponent());
//
this.add(actionJPanel, BorderLayout.EAST); // this.add(actionJPanel, BorderLayout.EAST);
this.add(resultLabel, BorderLayout.WEST); // this.add(resultLabel, BorderLayout.WEST);
} // }
//
private void addButtonToJPanel(JPanel actionLabel, // private void addButtonToJPanel(JPanel actionLabel,
JComponent toolBarComponent) { // JComponent toolBarComponent) {
actionLabel.add(toolBarComponent); // actionLabel.add(toolBarComponent);
if (toolBarComponent instanceof UIButton) { // if (toolBarComponent instanceof UIButton) {
toolBarComponent.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); // toolBarComponent.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
} // }
} // }
//
public void populate(TreePath[] search) { // public void populate(TreePath[] search) {
tree = search; // tree = search;
resultLabel.setText(Inter.getLocText("FR-Designer_Total") + ":" + tree.length); // resultLabel.setText(Inter.getLocText("FR-Designer_Total") + ":" + tree.length);
number = 0; // number = 0;
check(); // check();
} // }
//
public void next() { // public void next() {
if (number < tree.length - 1) { // if (number < tree.length - 1) {
componentTree.setAndScrollSelectionPath(tree[++number]); // componentTree.setAndScrollSelectionPath(tree[++number]);
} // }
check(); // check();
} // }
//
public void last() { // public void last() {
if (number > 0) { // if (number > 0) {
componentTree.setAndScrollSelectionPath(tree[--number]); // componentTree.setAndScrollSelectionPath(tree[--number]);
} // }
check(); // check();
} // }
//
public void check() { // public void check() {
if (tree.length < 1) { // if (tree.length < 1) {
backAction.setEnabled(false); // backAction.setEnabled(false);
forwardAction.setEnabled(false); // forwardAction.setEnabled(false);
} else { // } else {
backAction.setEnabled(number > 0); // backAction.setEnabled(number > 0);
forwardAction.setEnabled(number < tree.length - 1); // forwardAction.setEnabled(number < tree.length - 1);
} // }
//
} // }
} //}
private class BackAction extends UpdateAction { // private class BackAction extends UpdateAction {
//
public BackAction() { // public BackAction() {
this.setName(Inter.getLocText("Form-Hierarchy_Tree_Last")); // this.setName(Inter.getLocText("Form-Hierarchy_Tree_Last"));
this.setSmallIcon(BaseUtils // this.setSmallIcon(BaseUtils
.readIcon("com/fr/design/images/m_help/back.png")); // .readIcon("com/fr/design/images/m_help/back.png"));
this.setEnabled(false); // this.setEnabled(false);
} // }
//
public void actionPerformed(ActionEvent e) { // public void actionPerformed(ActionEvent e) {
searchResult.last(); // searchResult.last();
} // }
} // }
//
private class ForWardAction extends UpdateAction { // private class ForWardAction extends UpdateAction {
//
public ForWardAction() { // public ForWardAction() {
this.setName(Inter.getLocText("Form-Hierarchy_Tree_Next")); // this.setName(Inter.getLocText("Form-Hierarchy_Tree_Next"));
this.setSmallIcon(BaseUtils // this.setSmallIcon(BaseUtils
.readIcon("com/fr/design/images/m_help/forward.png")); // .readIcon("com/fr/design/images/m_help/forward.png"));
this.setEnabled(false); // this.setEnabled(false);
} // }
//
public void actionPerformed(ActionEvent e) { // public void actionPerformed(ActionEvent e) {
searchResult.next(); // searchResult.next();
} // }
} // }
@Override @Override
/** /**
* 位置 * 位置
* *
* @return 位置 * @return 位置
*/ */
public Location preferredLocation() { public Location preferredLocation() {

175
designer_form/src/com/fr/design/mainframe/FormWidgetDetailPane.java

@ -1,28 +1,24 @@
package com.fr.design.mainframe; package com.fr.design.mainframe;
import java.awt.BorderLayout; import java.awt.*;
import java.awt.CardLayout; import java.awt.event.ItemEvent;
import java.awt.Color; import java.awt.event.ItemListener;
import java.util.*;
import javax.swing.BorderFactory; import java.util.List;
import javax.swing.Icon;
import javax.swing.JPanel; import javax.swing.*;
import javax.swing.JScrollPane;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder; import javax.swing.border.LineBorder;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.design.gui.frpane.UITabbedPane; import com.fr.design.gui.frpane.UITabbedPane;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.parameter.ParameterPropertyPane; import com.fr.form.share.ShareConstants;
import com.fr.design.designer.beans.events.DesignerEditListener; import com.fr.form.share.ShareLoader;
import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.form.ui.ElCaseBindInfo;
import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.creator.XCreatorUtils;
import com.fr.design.designer.creator.XLayoutContainer;
import com.fr.design.designer.creator.XWParameterLayout;
import com.fr.general.Inter; import com.fr.general.Inter;
/** /**
@ -32,16 +28,12 @@ import com.fr.general.Inter;
* Time: 下午8:18 * Time: 下午8:18
*/ */
public class FormWidgetDetailPane extends FormDockView{ public class FormWidgetDetailPane extends FormDockView{
public static final String PARA = "para";
public static final String BODY = "body";
private UITabbedPane tabbedPane; private UITabbedPane tabbedPane;
private ParameterPropertyPane parameterPropertyPane; private JScrollPane downPanel;
private MobileWidgetTable mobileWidgetTable; private JPanel reuWidgetPanel;
private MobileBodyWidgetTable mobileBodyWidgetTable; private UIComboBox comboBox;
private UIScrollPane downPanel; private ElCaseBindInfo[] elCaseBindInfoList;
private JPanel centerPane;
private CardLayout cardLayout;
public static FormWidgetDetailPane getInstance() { public static FormWidgetDetailPane getInstance() {
if (HOLDER.singleton == null) { if (HOLDER.singleton == null) {
@ -84,100 +76,101 @@ public class FormWidgetDetailPane extends FormDockView{
clearDockingView(); clearDockingView();
return; return;
} }
parameterPropertyPane = ParameterPropertyPane.getInstance(designer);
parameterPropertyPane.setBorder(BorderFactory.createEmptyBorder(6, 6, 6, 6));
JPanel esp = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel esp = FRGUIPaneFactory.createBorderLayout_S_Pane();
esp.setBorder(null); esp.setBorder(null);
mobileWidgetTable = new MobileWidgetTable(designer); if (elCaseBindInfoList == null) {
mobileBodyWidgetTable = new MobileBodyWidgetTable(designer); elCaseBindInfoList = ShareLoader.getLoader().getAllBindInfoList();
designer.addDesignerEditListener(new mobileWidgetDesignerAdapter());
centerPane = FRGUIPaneFactory.createCardLayout_S_Pane();
cardLayout = (CardLayout) centerPane.getLayout();
centerPane.add(mobileWidgetTable,PARA);
centerPane.add(mobileBodyWidgetTable,BODY);
if(hasSelectParaPane(designer)){
cardLayout.show(centerPane,PARA);
} else {
cardLayout.show(centerPane,BODY);
} }
downPanel = new UIScrollPane(centerPane); initReuWidgetPanel();
downPanel.setBorder(new LineBorder(Color.gray)); esp.add(reuWidgetPanel, BorderLayout.CENTER);
esp.add(downPanel,BorderLayout.CENTER); UIButton button = new UIButton();
UILabel upLabel = new UILabel(Inter.getLocText("FR-Widget_Mobile_Table"),SwingConstants.CENTER); button.setIcon(BaseUtils.readIcon("/com/fr/design/form/images/download.png"));
upLabel.setBorder(BorderFactory.createEmptyBorder(6,0,6,0)); button.set4ToolbarButton();
esp.add(upLabel,BorderLayout.NORTH); JPanel widgetPane = FRGUIPaneFactory.createBorderLayout_L_Pane();
widgetPane.setBorder(BorderFactory.createEmptyBorder(3, 10, 3, 3));
widgetPane.add(new UILabel(Inter.getLocText("FR-Designer_LocalWidget"),
SwingConstants.HORIZONTAL), BorderLayout.WEST);
widgetPane.add(button, BorderLayout.EAST);
esp.add(widgetPane,BorderLayout.NORTH);
tabbedPane = new UITabbedPane(); tabbedPane = new UITabbedPane();
tabbedPane.setOpaque(true); tabbedPane.setOpaque(true);
tabbedPane.setBorder(null); tabbedPane.setBorder(null);
tabbedPane.setTabPlacement(SwingConstants.BOTTOM); tabbedPane.setTabPlacement(SwingConstants.BOTTOM);
tabbedPane.addTab(Inter.getLocText("FR-Widget_Mobile_Tree"), parameterPropertyPane); tabbedPane.addTab(Inter.getLocText("FR-Engine_Report"), esp);
tabbedPane.addTab(Inter.getLocText("FR-Widget_Mobile_Terminal"), esp); tabbedPane.addTab(Inter.getLocText("FR-Designer-Form-ToolBar_Chart"), new JPanel());
add(tabbedPane, BorderLayout.CENTER); add(tabbedPane, BorderLayout.CENTER);
} }
/**
* 初始化组件共享和复用面板
*/
private void initReuWidgetPanel() {
int rowCount = (elCaseBindInfoList.length + 1)/2;
downPanel = new UIScrollPane(new ShareWidgetPane(elCaseBindInfoList));
downPanel.setPreferredSize(new Dimension(236, rowCount * 82));
reuWidgetPanel = FRGUIPaneFactory.createCenterFlowInnerContainer_S_Pane();
comboBox = new UIComboBox(getCategories());
comboBox.setPreferredSize(new Dimension(236, 30));
initComboBoxSelectedListener();
reuWidgetPanel.add(comboBox, BorderLayout.NORTH);
reuWidgetPanel.add(downPanel, BorderLayout.CENTER);
reuWidgetPanel.setBorder(new LineBorder(Color.gray));
}
private void initComboBoxSelectedListener() {
comboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
int filterIndex = comboBox.getSelectedIndex();
if (filterIndex == 0) {
elCaseBindInfoList = ShareLoader.getLoader().getAllBindInfoList();
} else {
String filterName = (String) e.getItem();
elCaseBindInfoList = ShareLoader.getLoader().getFilterBindInfoList(filterName);
}
refreshDownPanel();
}
});
}
public String[] getCategories() {
return ShareConstants.WIDGET_CATEGORIES;
}
public void refreshDownPanel() {
reuWidgetPanel.remove(downPanel);
downPanel = new UIScrollPane(new ShareWidgetPane(elCaseBindInfoList));
//todo:这个地方有问题
reuWidgetPanel.add(downPanel);
repaintContainer();
}
public void repaintContainer() {
validate();
repaint();
revalidate();
}
public void setSelectedIndex(int index){ public void setSelectedIndex(int index){
tabbedPane.setSelectedIndex(index); tabbedPane.setSelectedIndex(index);
} }
/**
* 选中的组件是否在参数面板里
* @param designer 设计器
* @return 是则返回true
*/
public boolean hasSelectParaPane(FormDesigner designer){
XCreator xCreator = designer.getSelectionModel().getSelection().getSelectedCreator();
if(xCreator == null){
xCreator = designer.getRootComponent();
}
XLayoutContainer container = XCreatorUtils.getHotspotContainer(xCreator);
return xCreator.acceptType(XWParameterLayout.class) || container.acceptType(XWParameterLayout.class);
}
/** /**
* 清除数据 * 清除数据
*/ */
public void clearDockingView() { public void clearDockingView() {
parameterPropertyPane = null;
mobileWidgetTable = null;
JScrollPane psp = new JScrollPane(); JScrollPane psp = new JScrollPane();
psp.setBorder(null); psp.setBorder(null);
this.add(psp, BorderLayout.CENTER); this.add(psp, BorderLayout.CENTER);
} }
public class mobileWidgetDesignerAdapter implements DesignerEditListener {
public mobileWidgetDesignerAdapter() {
}
/**
* 响应界面改变事件
* @param evt 事件
*/
public void fireCreatorModified(DesignerEvent evt) {
if (evt.getCreatorEventID() == DesignerEvent.CREATOR_RESIZED
|| evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED
|| evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED
|| evt.getCreatorEventID() == DesignerEvent.CREATOR_ADDED) {
int value = downPanel.getVerticalScrollBar().getValue();
if(hasSelectParaPane(getEditingFormDesigner())){
cardLayout.show(centerPane,PARA);
mobileWidgetTable.refresh();
} else {
cardLayout.show(centerPane,BODY);
mobileBodyWidgetTable.refresh();
}
//出现滚动条
downPanel.doLayout();
//控件列表选中某组件,触发表单中选中控件,选中事件又触发列表刷新,滚动条回到0
//此处设置滚动条值为刷新前
downPanel.getVerticalScrollBar().setValue(value);
}
}
}
/** /**
* 定位 * 定位

14
designer_form/src/com/fr/design/mainframe/ShareWidgetButton.java

@ -46,16 +46,16 @@ public class ShareWidgetButton extends JPanel implements MouseListener, MouseMot
private void initUI() { private void initUI() {
this.setBackground(Color.WHITE); this.setBackground(Color.WHITE);
this.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); this.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
setPreferredSize(new Dimension(110, 70)); setPreferredSize(new Dimension(108, 72));
setLayout(FRGUIPaneFactory.createBorderLayout()); setLayout(FRGUIPaneFactory.createBorderLayout());
ImagePanel imagePanel = new ImagePanel((BufferedImage) bindInfo.getCover()); ImagePanel imagePanel = new ImagePanel((BufferedImage) bindInfo.getCover());
imagePanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
this.add(imagePanel, BorderLayout.NORTH); this.add(imagePanel, BorderLayout.NORTH);
JPanel panel = new JPanel();
UILabel label = new UILabel(bindInfo.getName(), SwingConstants.HORIZONTAL); UILabel label = new UILabel(bindInfo.getName(), SwingConstants.HORIZONTAL);
panel.setBackground(new Color(184, 220, 242)); label.setOpaque(true);
panel.add(label); label.setBackground(new Color(184, 220, 242));
this.add(panel, BorderLayout.SOUTH); this.add(label, BorderLayout.SOUTH);
} }
private class ImagePanel extends JPanel { private class ImagePanel extends JPanel {
@ -64,12 +64,12 @@ public class ShareWidgetButton extends JPanel implements MouseListener, MouseMot
public ImagePanel(BufferedImage image) { public ImagePanel(BufferedImage image) {
this.image = image; this.image = image;
this.setPreferredSize(new Dimension(110, 50)); this.setPreferredSize(new Dimension(108, 52));
} }
@Override @Override
public void paintComponent(Graphics g) { public void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, 110, 70, null); g.drawImage(image, 0, 0, null);
} }
} }

11
designer_form/src/com/fr/design/mainframe/ShareWidgetPane.java

@ -6,24 +6,27 @@ import com.fr.form.ui.ElCaseBindInfo;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.util.ArrayList; import java.util.*;
import java.util.List;
/** /**
* Created by xiaxiang on 2016/10/10. * Created by xiaxiang on 2016/10/10.
*/ */
public class ShareWidgetPane extends JPanel { public class ShareWidgetPane extends JPanel {
public ShareWidgetPane(ArrayList<ElCaseBindInfo> elCaseBindInfoList) {
public ShareWidgetPane(ElCaseBindInfo[] elCaseBindInfoList) {
this.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));// 设置面板的边框 ,距离上、左、下、右 的距离 this.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));// 设置面板的边框 ,距离上、左、下、右 的距离
int rowCount = (elCaseBindInfoList.size() + 1)/2; int rowCount = (elCaseBindInfoList.length + 1)/2;
this.setLayout(new GridLayout(rowCount, 2, 10, 10)); this.setLayout(new GridLayout(rowCount, 2, 10, 10));
for (ElCaseBindInfo rbModuleInfo : elCaseBindInfoList) { for (ElCaseBindInfo rbModuleInfo : elCaseBindInfoList) {
ShareWidgetButton widgetButton = new ShareWidgetButton(rbModuleInfo); ShareWidgetButton widgetButton = new ShareWidgetButton(rbModuleInfo);
this.add(widgetButton); this.add(widgetButton);
} }
if (elCaseBindInfoList.size() == 1) { if (elCaseBindInfoList.length == 1) {
this.add(new JPanel()); this.add(new JPanel());
} }
} }
} }

145
designer_form/src/com/fr/design/mainframe/WidgetPropertyPane.java

@ -4,17 +4,26 @@ import com.fr.base.BaseUtils;
import com.fr.design.ExtraDesignClassManager; import com.fr.design.ExtraDesignClassManager;
import com.fr.design.designer.beans.events.DesignerEditListener; import com.fr.design.designer.beans.events.DesignerEditListener;
import com.fr.design.designer.beans.events.DesignerEvent; import com.fr.design.designer.beans.events.DesignerEvent;
import com.fr.design.designer.creator.XCreator;
import com.fr.design.designer.creator.XCreatorUtils;
import com.fr.design.designer.creator.XLayoutContainer;
import com.fr.design.designer.creator.XWParameterLayout;
import com.fr.design.designer.properties.EventPropertyTable; import com.fr.design.designer.properties.EventPropertyTable;
import com.fr.design.designer.properties.WidgetPropertyTable; import com.fr.design.designer.properties.WidgetPropertyTable;
import com.fr.design.designer.treeview.ComponentTreeModel;
import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.fun.WidgetPropertyUIProvider;
import com.fr.design.gui.frpane.UITabbedPane; import com.fr.design.gui.frpane.UITabbedPane;
import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.itable.AbstractPropertyTable; import com.fr.design.gui.itable.AbstractPropertyTable;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.parameter.ParameterPropertyPane;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.stable.ArrayUtils; import com.fr.stable.ArrayUtils;
import javax.swing.*; import javax.swing.*;
import javax.swing.border.LineBorder;
import java.awt.*; import java.awt.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -29,6 +38,18 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper
private EventPropertyTable eventTable; private EventPropertyTable eventTable;
private List<AbstractPropertyTable> widgetPropertyTables; private List<AbstractPropertyTable> widgetPropertyTables;
private FormDesigner designer; private FormDesigner designer;
private ComponentTree componentTree;
private JPanel wsp;
private ParameterPropertyPane parameterPropertyPane;
private MobileWidgetTable mobileWidgetTable;
private MobileBodyWidgetTable mobileBodyWidgetTable;
private UIScrollPane downPanel;
private JPanel centerPane;
private CardLayout cardLayout;
public static final String PARA = "para";
public static final String BODY = "body";
public static final int NODE_LENGTH = 2;
public boolean isrefresh = true;
public static WidgetPropertyPane getInstance() { public static WidgetPropertyPane getInstance() {
if (HOLDER.singleton == null) { if (HOLDER.singleton == null) {
@ -52,6 +73,37 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper
setLayout(FRGUIPaneFactory.createBorderLayout()); setLayout(FRGUIPaneFactory.createBorderLayout());
} }
public class mobileWidgetDesignerAdapter implements DesignerEditListener {
public mobileWidgetDesignerAdapter() {
}
/**
* 响应界面改变事件
* @param evt 事件
*/
public void fireCreatorModified(DesignerEvent evt) {
if (evt.getCreatorEventID() == DesignerEvent.CREATOR_RESIZED
|| evt.getCreatorEventID() == DesignerEvent.CREATOR_EDITED
|| evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED
|| evt.getCreatorEventID() == DesignerEvent.CREATOR_ADDED) {
int value = downPanel.getVerticalScrollBar().getValue();
if(hasSelectParaPane(getEditingFormDesigner())){
cardLayout.show(centerPane,PARA);
mobileWidgetTable.refresh();
} else {
cardLayout.show(centerPane,BODY);
mobileBodyWidgetTable.refresh();
}
//出现滚动条
downPanel.doLayout();
//控件列表选中某组件,触发表单中选中控件,选中事件又触发列表刷新,滚动条回到0
//此处设置滚动条值为刷新前
downPanel.getVerticalScrollBar().setValue(value);
}
}
}
@Override @Override
public String getViewTitle() { public String getViewTitle() {
return Inter.getLocText("Form-Widget_Property_Table"); return Inter.getLocText("Form-Widget_Property_Table");
@ -64,12 +116,24 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper
@Override @Override
public void refreshDockingView() { public void refreshDockingView() {
designer = this.getEditingFormDesigner(); designer = this.getEditingFormDesigner();
removeAll(); removeAll();
if (designer == null) { if (designer == null) {
clearDockingView(); clearDockingView();
return; return;
} }
componentTree = new ComponentTree(designer);
ComponentTreeModel treeModel = (ComponentTreeModel) componentTree.getModel();
XCreator root = (XCreator)treeModel.getRoot();
int childCount = treeModel.getChildCount(root);
//按照节点添加para在下的,但这里需要para节点在上,调整一下位置
if(childCount == NODE_LENGTH){
adjustPosition(treeModel, designer);
}
widgetPropertyTables = new ArrayList<AbstractPropertyTable>(); widgetPropertyTables = new ArrayList<AbstractPropertyTable>();
propertyTable = new WidgetPropertyTable(designer); propertyTable = new WidgetPropertyTable(designer);
designer.addDesignerEditListener(new WidgetPropertyDesignerAdapter(propertyTable)); designer.addDesignerEditListener(new WidgetPropertyDesignerAdapter(propertyTable));
@ -81,30 +145,93 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetProper
eventTable.setBorder(null); eventTable.setBorder(null);
UIScrollPane esp = new UIScrollPane(eventTable); UIScrollPane esp = new UIScrollPane(eventTable);
esp.setBorder(null); esp.setBorder(null);
// JTabbedPane tabbedPane = new JTabbedPane();
wsp = FRGUIPaneFactory.createBorderLayout_S_Pane();
wsp.setBorder(null);
mobileWidgetTable = new MobileWidgetTable(designer);
mobileBodyWidgetTable = new MobileBodyWidgetTable(designer);
designer.addDesignerEditListener(new mobileWidgetDesignerAdapter());
centerPane = FRGUIPaneFactory.createCardLayout_S_Pane();
cardLayout = (CardLayout) centerPane.getLayout();
centerPane.add(mobileWidgetTable,PARA);
centerPane.add(mobileBodyWidgetTable,BODY);
if(hasSelectParaPane(designer)){
cardLayout.show(centerPane,PARA);
} else {
cardLayout.show(centerPane,BODY);
}
downPanel = new UIScrollPane(centerPane);
downPanel.setBorder(new LineBorder(Color.gray));
wsp.add(downPanel,BorderLayout.CENTER);
UITabbedPane tabbedPane = new UITabbedPane(); UITabbedPane tabbedPane = new UITabbedPane();
tabbedPane.setOpaque(true); tabbedPane.setOpaque(true);
tabbedPane.setBorder(null); tabbedPane.setBorder(null);
tabbedPane.setTabPlacement(SwingConstants.BOTTOM); tabbedPane.setTabPlacement(SwingConstants.BOTTOM);
tabbedPane.addTab(Inter.getLocText("Form-Properties"), psp); tabbedPane.addTab(Inter.getLocText("Form-Properties"), psp);
tabbedPane.addTab(Inter.getLocText("Form-Events"), esp); tabbedPane.addTab(Inter.getLocText("Form-Events"), esp);
tabbedPane.addTab(Inter.getLocText("FR-Widget_Mobile_Terminal"), wsp);
WidgetPropertyUIProvider[] widgetAttrProviders = getExtraPropertyUIProviders(); WidgetPropertyUIProvider[] widgetAttrProviders = getExtraPropertyUIProviders();
for (WidgetPropertyUIProvider widgetAttrProvider : widgetAttrProviders) { if (widgetAttrProviders.length == 0) {
AbstractPropertyTable propertyTable = widgetAttrProvider.createWidgetAttrTable(); UILabel upLabel = new UILabel(Inter.getLocText("FR-Widget_Mobile_Table"),SwingConstants.CENTER);
widgetPropertyTables.add(propertyTable); upLabel.setBorder(BorderFactory.createEmptyBorder(6,0,6,0));
designer.addDesignerEditListener(new WidgetPropertyDesignerAdapter(propertyTable)); wsp.add(upLabel,BorderLayout.NORTH);
UIScrollPane uiScrollPane = new UIScrollPane(propertyTable); } else {
uiScrollPane.setBorder(null); for (WidgetPropertyUIProvider widgetAttrProvider : widgetAttrProviders) {
tabbedPane.addTab(widgetAttrProvider.tableTitle(), uiScrollPane); AbstractPropertyTable propertyTable = widgetAttrProvider.createWidgetAttrTable();
widgetPropertyTables.add(propertyTable);
designer.addDesignerEditListener(new WidgetPropertyDesignerAdapter(propertyTable));
UIScrollPane uiScrollPane = new UIScrollPane(propertyTable);
uiScrollPane.setBorder(null);
wsp.add(uiScrollPane);
}
} }
add(tabbedPane, BorderLayout.CENTER);
parameterPropertyPane = ParameterPropertyPane.getInstance(designer);
parameterPropertyPane.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 4));
add(parameterPropertyPane, BorderLayout.NORTH);
add(tabbedPane, BorderLayout.CENTER);
propertyTable.initPropertyGroups(null); propertyTable.initPropertyGroups(null);
eventTable.refresh(); eventTable.refresh();
for (AbstractPropertyTable propertyTable : widgetPropertyTables) { for (AbstractPropertyTable propertyTable : widgetPropertyTables) {
propertyTable.initPropertyGroups(designer); propertyTable.initPropertyGroups(designer);
} }
isrefresh = false;
}
/**
* 调整结构树para和body的位置
*
* @param treeModel
* @param formDesigner
*/
private void adjustPosition(ComponentTreeModel treeModel,FormDesigner formDesigner){
XCreator root = (XCreator)treeModel.getRoot();
if(treeModel.getChild(root,0) instanceof XWParameterLayout){
return;
}
root.add((Component)(treeModel.getChild(root,0)),1);
treeModel.setRoot(root);
componentTree = new ComponentTree(formDesigner,treeModel);
}
//
/**
* 选中的组件是否在参数面板里
* @param designer 设计器
* @return 是则返回true
*/
public boolean hasSelectParaPane(FormDesigner designer){
XCreator xCreator = designer.getSelectionModel().getSelection().getSelectedCreator();
if(xCreator == null){
xCreator = designer.getRootComponent();
}
XLayoutContainer container = XCreatorUtils.getHotspotContainer(xCreator);
return xCreator.acceptType(XWParameterLayout.class) || container.acceptType(XWParameterLayout.class);
} }
/** /**

9
designer_form/src/com/fr/design/mainframe/widget/UITreeComboBox.java

@ -107,14 +107,16 @@ public class UITreeComboBox extends JComboBox{
class UITreeComboBoxRenderer extends DefaultListCellRenderer { class UITreeComboBoxRenderer extends DefaultListCellRenderer {
public Component getListCellRendererComponent(JList list, Object value, public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus){ int index, boolean isSelected, boolean cellHasFocus){
if(value != null){ if(tree != null ){
TreePath path = (TreePath)value; TreePath path = tree.getSelectedTreePath()[0];
tree.setAndScrollSelectionPath(path);
Object node = path.getLastPathComponent(); Object node = path.getLastPathComponent();
value = node; value = node;
TreeCellRenderer r = tree.getCellRenderer(); TreeCellRenderer r = tree.getCellRenderer();
JLabel lb = (JLabel)r.getTreeCellRendererComponent( JLabel lb = (JLabel)r.getTreeCellRendererComponent(
tree, value, isSelected, false, false, index, tree, value, isSelected, false, false, index,
cellHasFocus); cellHasFocus);
return lb; return lb;
} }
return super.getListCellRendererComponent(list, value, index, return super.getListCellRendererComponent(list, value, index,
@ -138,7 +140,8 @@ public class UITreeComboBox extends JComboBox{
setSelectedItem(paths[0]); setSelectedItem(paths[0]);
MenuSelectionManager.defaultManager().clearSelectedPath(); MenuSelectionManager.defaultManager().clearSelectedPath();
} else { } else {
return; tree.refreshUI();
repaint();
} }
} }

3
designer_form/src/com/fr/design/mainframe/widget/wrappers/TreeModelWrapper.java

@ -7,6 +7,7 @@ import com.fr.design.Exception.ValidationException;
import com.fr.design.designer.properties.Decoder; import com.fr.design.designer.properties.Decoder;
import com.fr.design.designer.properties.Encoder; import com.fr.design.designer.properties.Encoder;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.general.NameObject;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
public class TreeModelWrapper implements Encoder, Decoder { public class TreeModelWrapper implements Encoder, Decoder {
@ -21,6 +22,8 @@ public class TreeModelWrapper implements Encoder, Decoder {
} else if (v instanceof TreeNodeWrapper) { } else if (v instanceof TreeNodeWrapper) {
TreeNodeAttr[] treeNodeAttrs = ((TreeNodeWrapper) v).getTreeNodeAttrs(); TreeNodeAttr[] treeNodeAttrs = ((TreeNodeWrapper) v).getTreeNodeAttrs();
return TemplateUtils.render(Inter.getLocText("FR-Designer_Total_N_Grade"), new String[]{"N"}, new String[]{treeNodeAttrs.length + ""}); return TemplateUtils.render(Inter.getLocText("FR-Designer_Total_N_Grade"), new String[]{"N"}, new String[]{treeNodeAttrs.length + ""});
} else if (v instanceof NameObject) {
return Inter.getLocText("FR-Designer_DataTable-Build");
} else { } else {
return Inter.getLocText("FR-Designer_Auto-Build"); return Inter.getLocText("FR-Designer_Auto-Build");
} }

4
designer_form/src/com/fr/design/parameter/ParameterPropertyPane.java

@ -48,12 +48,12 @@ public class ParameterPropertyPane extends JPanel{
this.setLayout(new BorderLayout(0, 6)); this.setLayout(new BorderLayout(0, 6));
this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
this.add(toolbarPane, BorderLayout.NORTH); this.add(toolbarPane, BorderLayout.CENTER);
} }
private void setEditor(FormDesigner editor) { private void setEditor(FormDesigner editor) {
this.remove(FormHierarchyTreePane.getInstance()); this.remove(FormHierarchyTreePane.getInstance());
this.add(FormHierarchyTreePane.getInstance(editor), BorderLayout.CENTER); this.add(FormHierarchyTreePane.getInstance(editor), BorderLayout.NORTH);
} }
private void initParameterListener() { private void initParameterListener() {

Loading…
Cancel
Save