diff --git a/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java b/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java index 09d3e115b..7c9fcdaae 100644 --- a/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java +++ b/designer/src/com/fr/design/mainframe/ElementCasePaneDelegate.java @@ -61,8 +61,7 @@ public class ElementCasePaneDelegate extends ElementCasePane { if (editingTemplate != null && !editingTemplate.isUpMode()) { // 模板初始化完成后,才能初始化超级链接面板 // HyperlinkGroupPane hyperlinkGroupPane = ReportHyperlinkGroupPane.getInstance(HyperlinkGroupPaneActionImpl.getInstance()); - HyperlinkGroupPane hyperlinkGroupPane = DesignerContext.getDesignerFrame().getSelectedJTemplate() - .getHyperLinkPane(HyperlinkGroupPaneActionImpl.getInstance()); + HyperlinkGroupPane hyperlinkGroupPane = editingTemplate.getHyperLinkPane(HyperlinkGroupPaneActionImpl.getInstance()); hyperlinkGroupPane.populate(ElementCasePaneDelegate.this); if (((ElementCasePaneDelegate)e.getSource()).getSelection() instanceof FloatSelection) { EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.REPORT_FLOAT); diff --git a/designer/src/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java b/designer/src/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java index 92ca0617e..689a59c7f 100644 --- a/designer/src/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java +++ b/designer/src/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java @@ -59,11 +59,12 @@ public class HyperlinkGroupPaneActionImpl implements HyperlinkGroupPaneActionPro @Override public void saveSettings(HyperlinkGroupPane hyperlinkGroupPane) { - TargetComponent tc = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getCurrentElementCasePane(); - if (tc == null) { + // plough: 需要判断设计器是否初始化完成,不能用 HistoryTemplateListPane.getInstance().getCurrentEditingTemplate() + JTemplate jt = DesignerContext.getDesignerFrame().getSelectedJTemplate(); + if (jt == null) { return; } - ElementCasePane reportPane = (ElementCasePane)tc; + ElementCasePane reportPane = (ElementCasePane)jt.getCurrentElementCasePane(); final TemplateElementCase report = reportPane.getEditingElementCase(); final Selection sel = reportPane.getSelection(); final NameJavaScriptGroup updateNameHyperlinks = hyperlinkGroupPane.updateJSGroup(); diff --git a/designer_base/src/com/fr/design/gui/controlpane/UIListControlPane.java b/designer_base/src/com/fr/design/gui/controlpane/UIListControlPane.java index 9c82ffbe9..5d48980a9 100644 --- a/designer_base/src/com/fr/design/gui/controlpane/UIListControlPane.java +++ b/designer_base/src/com/fr/design/gui/controlpane/UIListControlPane.java @@ -29,6 +29,8 @@ import com.fr.stable.Nameable; import com.fr.stable.core.PropertyChangeAdapter; import javax.swing.*; +import javax.swing.event.ListDataEvent; +import javax.swing.event.ListDataListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.awt.*; @@ -55,6 +57,7 @@ public abstract class UIListControlPane extends UIControlPane { protected int editingIndex; protected String selectedName; private boolean isNameRepeated = false; + protected boolean isPopulating = false; public UIListControlPane() { this.initComponentPane(); @@ -94,11 +97,25 @@ public abstract class UIListControlPane extends UIControlPane { ((JControlUpdatePane) UIListControlPane.this.controlUpdatePane).update(); ((JControlUpdatePane) UIListControlPane.this.controlUpdatePane).populate(); UIListControlPane.this.checkButtonEnabled(); - // plough:感觉每次valueChange都保存一下,会稍微影响效率 - saveSettings(); } } }); + nameableList.getModel().addListDataListener(new ListDataListener() { + @Override + public void intervalAdded(ListDataEvent e) { + saveSettings(); + } + + @Override + public void intervalRemoved(ListDataEvent e) { + saveSettings(); + } + + @Override + public void contentsChanged(ListDataEvent e) { + saveSettings(); + } + }); } public UINameEdList createJNameList() { @@ -179,9 +196,11 @@ public abstract class UIListControlPane extends UIControlPane { @Override public void populate(Nameable[] nameableArray) { + isPopulating = true; // 加一个标识位,避免切换单元格时,触发 saveSettings DefaultListModel listModel = (DefaultListModel) this.nameableList.getModel(); listModel.removeAllElements(); if (ArrayUtils.isEmpty(nameableArray)) { + isPopulating = false; return; } @@ -193,6 +212,8 @@ public abstract class UIListControlPane extends UIControlPane { this.nameableList.setSelectedIndex(0); } this.checkButtonEnabled(); + + isPopulating = false; } /** diff --git a/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java b/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java index f990d3ba4..6cd9522d9 100644 --- a/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java +++ b/designer_base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java @@ -99,6 +99,9 @@ public abstract class HyperlinkGroupPane extends UIListControlPane { @Override public void saveSettings() { + if (isPopulating) { + return; + } hyperlinkGroupPaneActionProvider.saveSettings(this); } } \ No newline at end of file