From 72f18c340dcc10203be9a2fd010094e3dee6e762 Mon Sep 17 00:00:00 2001 From: Carlson Date: Fri, 2 Dec 2022 16:41:06 +0800 Subject: [PATCH 1/2] =?UTF-8?q?REPORT-85754=20fix:=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E5=9B=BE=E8=A1=A8=E5=9C=BA=E6=99=AF=E8=AE=BE=E7=BD=AE-js-?= =?UTF-8?q?=E9=AB=98=E7=BA=A7=E7=BC=96=E8=BE=91=E7=95=8C=E9=9D=A2=E4=B8=8D?= =?UTF-8?q?=E5=BA=94=E8=AF=A5=E7=BD=AE=E5=BA=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/javascript/JSContentPane.java | 9 +++++++++ .../com/fr/design/javascript/JavaScriptImplPane.java | 6 +++++- .../chart/custom/component/VanChartHyperLinkPane.java | 6 +++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java b/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java index c9344f5ca..a31ebe845 100644 --- a/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java +++ b/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java @@ -31,6 +31,7 @@ import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FontMetrics; +import java.awt.Window; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.MouseAdapter; @@ -54,6 +55,7 @@ public class JSContentPane extends BasicPane { private JSImplUpdateAction jsImplUpdateAction; private JSImplPopulateAction jsImplPopulateAction; private boolean modal; + private Window parentWindow; BasicDialog advancedEditorDialog ; public JSContentPane(){} @@ -122,6 +124,9 @@ public class JSContentPane extends BasicPane { super.doCancel(); } },new Dimension(900,800)); + if (parentWindow != null) { + parentWindow.setVisible(false); + } advancedEditorDialog.setModal(modal); advancedEditorDialog.setResizable(true); advancedEditorDialog.pack(); @@ -133,6 +138,10 @@ public class JSContentPane extends BasicPane { labelPane.add(advancedEditorLabel,BorderLayout.EAST); } + public void setParentWindow(Window parentWindow) { + this.parentWindow = parentWindow; + } + protected UIScrollPane createContentTextAreaPanel(){ contentTextArea = new RSyntaxTextArea(); contentTextArea.setCloseCurlyBraces(true); diff --git a/designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java b/designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java index 6a83ad3d2..fa7e30dc4 100644 --- a/designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java +++ b/designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java @@ -29,6 +29,7 @@ import javax.swing.JPanel; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; +import java.awt.Window; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -49,6 +50,7 @@ public class JavaScriptImplPane extends AbstractHyperLinkPane { public JavaScriptImplPane(HashMap hyperLinkEditorMap, boolean needRenamePane) { super(hyperLinkEditorMap, needRenamePane); this.defaultArgs = new String[0]; + this.modal = true; initComponents(); } @@ -149,7 +151,9 @@ public class JavaScriptImplPane extends AbstractHyperLinkPane { return importedJsPane; } - + public void setParentWindow4ContentPane(Window parentWindow) { + jsPane.setParentWindow(parentWindow); + } /** * 参数改变 diff --git a/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java b/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java index 6e5b346a1..1a23ca816 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java @@ -77,7 +77,11 @@ public class VanChartHyperLinkPane extends VanChartUIListControlPane { Constructor constructor = null; try { constructor = creator.getUpdatePane().getConstructor(HashMap.class, boolean.class); - return constructor.newInstance(getHyperLinkEditorMap(), false); + BasicBeanPane pane = constructor.newInstance(getHyperLinkEditorMap(), false); + if (pane instanceof JavaScriptImplPane) { + ((JavaScriptImplPane) pane).setParentWindow4ContentPane(getPopupEditDialog()); + } + return pane; } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); From fcd0863d2909e9caefdb664a3383a2f92b380424 Mon Sep 17 00:00:00 2001 From: Carlson Date: Wed, 7 Dec 2022 15:44:42 +0800 Subject: [PATCH 2/2] =?UTF-8?q?REPORT-85754=20fix:=E5=8F=82=E8=80=83cpt?= =?UTF-8?q?=E5=9B=BE=E8=A1=A8=E7=9A=84=E7=B1=BB=E4=BC=BC=E5=86=99=E6=B3=95?= =?UTF-8?q?=EF=BC=8C=E5=BC=95=E5=85=A5=E7=84=A6=E7=82=B9=E4=B8=A2=E5=A4=B1?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/gui/controlpane/UIControlPane.java | 98 ++++++++++--------- .../fr/design/javascript/JSContentPane.java | 18 +--- .../design/javascript/JavaScriptImplPane.java | 17 +--- .../component/VanChartHyperLinkPane.java | 18 +++- .../fr/design/condition/HyperlinkPane.java | 11 ++- 5 files changed, 82 insertions(+), 80 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java index f9a3ed0db..12f904922 100644 --- a/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java +++ b/designer-base/src/main/java/com/fr/design/gui/controlpane/UIControlPane.java @@ -31,7 +31,6 @@ import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FlowLayout; -import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; import java.awt.Graphics2D; @@ -241,51 +240,12 @@ public abstract class UIControlPane extends JControlPane { } private void hideDialog() { - // 检查是否有子弹窗,如果有,则不隐藏 - for (Window window : getOwnedWindows()) { - if (window.isVisible()) { - return; - } - } - // 如果有可见模态对话框,则不隐藏 - for (Window window : DesignerContext.getDesignerFrame().getOwnedWindows()) { - if (window instanceof JDialog && window.isVisible() && ((JDialog) window).isModal()) { - return; - } - } - - try { - //没有指定owner的弹出框用的是SwingUtilities.getSharedOwnerFrame() - Frame sharedOwnerFrame = Reflect.on(SwingUtilities.class).call("getSharedOwnerFrame").get(); - for (Window window : sharedOwnerFrame.getOwnedWindows()) { - if (window instanceof JDialog && window.isVisible() && ((JDialog) window).isModal()) { - // 如果有可见模态对话框,则不隐藏 - return; - } - } - } catch (Exception ignore) { - //do nothing - } - - // 要隐藏 先检查有没有非法输入 - // 非法输入检查放在最后,因为可能出现面板弹出新弹框而失去焦点的情况,比如 输入公式时,弹出公式编辑对话框 - try { - checkValid(); - } catch (Exception exp) { - // 存在非法输入 拒绝隐藏 - this.setAlwaysOnTop(true); - FineJOptionPane.showMessageDialog(this, exp.getMessage()); - this.requestFocus(); - return; - } - if (JavaFxNativeFileChooser.isShowDialogState()) { - JavaFxNativeFileChooser.setShowDialogState(false); - return; + if (needToHidePopupEditDialog()) { + saveSettings(); + setVisible(false); + PopupDialogSaveAction saveAction = OSSupportCenter.getAction(PopupDialogSaveAction.class); + saveAction.unregister(); } - saveSettings(); - setVisible(false); - PopupDialogSaveAction saveAction = OSSupportCenter.getAction(PopupDialogSaveAction.class); - saveAction.unregister(); } private void initListener() { @@ -302,6 +262,54 @@ public abstract class UIControlPane extends JControlPane { } } + /** + * 是否需要隐藏popupEditDialog + */ + protected boolean needToHidePopupEditDialog() { + // 检查是否有子弹窗,如果有,则不隐藏 + for (Window window : popupEditDialog.getOwnedWindows()) { + if (window.isVisible()) { + return false; + } + } + // 如果有可见模态对话框,则不隐藏 + for (Window window : DesignerContext.getDesignerFrame().getOwnedWindows()) { + if (window instanceof JDialog && window.isVisible() && ((JDialog) window).isModal()) { + return false; + } + } + + try { + //没有指定owner的弹出框用的是SwingUtilities.getSharedOwnerFrame() + Frame sharedOwnerFrame = Reflect.on(SwingUtilities.class).call("getSharedOwnerFrame").get(); + for (Window window : sharedOwnerFrame.getOwnedWindows()) { + if (window instanceof JDialog && window.isVisible() && ((JDialog) window).isModal()) { + // 如果有可见模态对话框,则不隐藏 + return false; + } + } + } catch (Exception ignore) { + //do nothing + } + + // 要隐藏 先检查有没有非法输入 + // 非法输入检查放在最后,因为可能出现面板弹出新弹框而失去焦点的情况,比如 输入公式时,弹出公式编辑对话框 + try { + checkValid(); + } catch (Exception exp) { + // 存在非法输入 拒绝隐藏 + popupEditDialog.setAlwaysOnTop(true); + FineJOptionPane.showMessageDialog(this, exp.getMessage()); + popupEditDialog.requestFocus(); + return false; + } + if (JavaFxNativeFileChooser.isShowDialogState()) { + JavaFxNativeFileChooser.setShowDialogState(false); + return false; + } + return true; + } + // 移动弹出编辑面板的工具条 private class PopupToolPane extends JPanel { private JDialog parentDialog; // 如果不在对话框中,值为null diff --git a/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java b/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java index a31ebe845..31c45da76 100644 --- a/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java +++ b/designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java @@ -24,23 +24,21 @@ import com.fr.design.javascript.jsapi.JSImplUpdateAction; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.general.IOUtils; - import com.fr.js.JavaScriptImpl; +import javax.swing.JPanel; +import javax.swing.KeyStroke; +import javax.swing.SwingConstants; +import javax.swing.SwingWorker; import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FontMetrics; -import java.awt.Window; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; -import javax.swing.JPanel; -import javax.swing.KeyStroke; -import javax.swing.SwingConstants; -import javax.swing.SwingWorker; public class JSContentPane extends BasicPane { protected RSyntaxTextArea contentTextArea; @@ -55,7 +53,6 @@ public class JSContentPane extends BasicPane { private JSImplUpdateAction jsImplUpdateAction; private JSImplPopulateAction jsImplPopulateAction; private boolean modal; - private Window parentWindow; BasicDialog advancedEditorDialog ; public JSContentPane(){} @@ -124,9 +121,6 @@ public class JSContentPane extends BasicPane { super.doCancel(); } },new Dimension(900,800)); - if (parentWindow != null) { - parentWindow.setVisible(false); - } advancedEditorDialog.setModal(modal); advancedEditorDialog.setResizable(true); advancedEditorDialog.pack(); @@ -138,10 +132,6 @@ public class JSContentPane extends BasicPane { labelPane.add(advancedEditorLabel,BorderLayout.EAST); } - public void setParentWindow(Window parentWindow) { - this.parentWindow = parentWindow; - } - protected UIScrollPane createContentTextAreaPanel(){ contentTextArea = new RSyntaxTextArea(); contentTextArea.setCloseCurlyBraces(true); diff --git a/designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java b/designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java index fa7e30dc4..37bca2f6e 100644 --- a/designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java +++ b/designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java @@ -14,22 +14,18 @@ import com.fr.design.javascript.jsapi.JSImplUpdateAction; import com.fr.design.mainframe.DesignerContext; import com.fr.design.scrollruler.ModLineBorder; import com.fr.design.utils.gui.GUICoreUtils; - import com.fr.js.JavaScriptImpl; import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; - -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.GridBagConstraints; -import java.awt.GridLayout; import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; - -import java.awt.Window; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.GridBagConstraints; +import java.awt.GridLayout; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -50,7 +46,6 @@ public class JavaScriptImplPane extends AbstractHyperLinkPane { public JavaScriptImplPane(HashMap hyperLinkEditorMap, boolean needRenamePane) { super(hyperLinkEditorMap, needRenamePane); this.defaultArgs = new String[0]; - this.modal = true; initComponents(); } @@ -151,10 +146,6 @@ public class JavaScriptImplPane extends AbstractHyperLinkPane { return importedJsPane; } - public void setParentWindow4ContentPane(Window parentWindow) { - jsPane.setParentWindow(parentWindow); - } - /** * 参数改变 * diff --git a/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java b/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java index 1a23ca816..7b74d1576 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java @@ -39,6 +39,8 @@ import com.fr.stable.Nameable; import com.fr.stable.bridge.StableFactory; import com.fr.van.chart.designer.component.VanChartUIListControlPane; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; @@ -77,11 +79,7 @@ public class VanChartHyperLinkPane extends VanChartUIListControlPane { Constructor constructor = null; try { constructor = creator.getUpdatePane().getConstructor(HashMap.class, boolean.class); - BasicBeanPane pane = constructor.newInstance(getHyperLinkEditorMap(), false); - if (pane instanceof JavaScriptImplPane) { - ((JavaScriptImplPane) pane).setParentWindow4ContentPane(getPopupEditDialog()); - } - return pane; + return constructor.newInstance(getHyperLinkEditorMap(), false); } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); @@ -190,6 +188,16 @@ public class VanChartHyperLinkPane extends VanChartUIListControlPane { } this.populate(nameObjects.toArray(new NameObject[nameObjects.size()])); + if (popupEditDialog instanceof HyperDialog) { + popupEditDialog.addWindowFocusListener(new WindowAdapter() { + @Override + public void windowLostFocus(WindowEvent e) { + if (needToHidePopupEditDialog()) { + popupEditDialog.setVisible(false); + } + } + }); + } doLayout(); } diff --git a/designer-realize/src/main/java/com/fr/design/condition/HyperlinkPane.java b/designer-realize/src/main/java/com/fr/design/condition/HyperlinkPane.java index 643ad7890..41e2ada86 100644 --- a/designer-realize/src/main/java/com/fr/design/condition/HyperlinkPane.java +++ b/designer-realize/src/main/java/com/fr/design/condition/HyperlinkPane.java @@ -9,12 +9,16 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.HyperlinkGroupPaneActionImpl; - -import com.fr.js.*; +import com.fr.js.EmailJavaScript; +import com.fr.js.JavaScript; +import com.fr.js.JavaScriptImpl; +import com.fr.js.NameJavaScriptGroup; +import com.fr.js.ReportletHyperlink; +import com.fr.js.WebHyperlink; import com.fr.report.cell.cellattr.highlight.HighlightAction; import com.fr.report.cell.cellattr.highlight.HyperlinkHighlightAction; -import javax.swing.*; +import javax.swing.SwingUtilities; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -47,6 +51,7 @@ public class HyperlinkPane extends ConditionAttrSingleConditionPane