From b9e8b5227a7e96c76b9220947ab8b02c62f18ce5 Mon Sep 17 00:00:00 2001 From: levy Date: Fri, 21 Oct 2022 18:13:37 +0800 Subject: [PATCH 1/3] =?UTF-8?q?REPORT-82110=20=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E5=8F=96=E8=89=B2bug=20=E3=80=90=E9=97=AE=E9=A2=98=E5=8E=9F?= =?UTF-8?q?=E5=9B=A0=E3=80=91=E5=8F=96=E8=89=B2=E5=99=A8ColorPicker?= =?UTF-8?q?=E5=8F=96=E8=89=B2=E6=98=AF=E5=9F=BA=E4=BA=8E=E6=88=AA=E5=B1=8F?= =?UTF-8?q?=E5=90=8E=E8=AF=BB=E5=8F=96=E9=A2=9C=E8=89=B2=E7=9A=84=EF=BC=8C?= =?UTF-8?q?=E5=9B=A0=E6=AD=A4=E9=9C=80=E7=A1=AE=E4=BF=9D=E5=BC=B9=E5=87=BA?= =?UTF-8?q?=E6=A1=86=E5=85=A8=E9=83=A8=E5=85=B3=E9=97=AD=E5=90=8E=E6=88=AA?= =?UTF-8?q?=E5=B1=8F=E3=80=82=20=E3=80=90=E6=94=B9=E5=8A=A8=E6=80=9D?= =?UTF-8?q?=E8=B7=AF=E3=80=911=E3=80=81=E5=8F=96=E8=89=B2=E5=89=8D?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0hidePopupMenu=E7=9A=84=E6=93=8D=E4=BD=9C=202?= =?UTF-8?q?=E3=80=81=E4=BD=BF=E7=94=A8invokeLater=E7=A1=AE=E4=BF=9D?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=E4=BB=BB=E5=8A=A1=E6=89=A7=E8=A1=8C=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E5=90=8E=E6=88=AA=E5=B1=8F=203=E3=80=81=E4=B8=BA?= =?UTF-8?q?=E9=81=BF=E5=85=8DREPORT-25645=E7=9A=84macOS=E9=80=82=E9=85=8D?= =?UTF-8?q?=E9=97=AE=E9=A2=98,=E6=96=B0=E5=A2=9EhidePopupMenu4PickColor?= =?UTF-8?q?=E7=9A=84=E6=96=B9=E6=B3=95=20=E3=80=90Review=E5=BB=BA=E8=AE=AE?= =?UTF-8?q?=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/style/color/ColorPicker.java | 11 ++++------- .../fr/design/style/color/UIToolbarColorButton.java | 10 ++++++++++ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/style/color/ColorPicker.java b/designer-base/src/main/java/com/fr/design/style/color/ColorPicker.java index 2e5f56981..baf7920e1 100644 --- a/designer-base/src/main/java/com/fr/design/style/color/ColorPicker.java +++ b/designer-base/src/main/java/com/fr/design/style/color/ColorPicker.java @@ -70,13 +70,10 @@ public class ColorPicker extends JDialog implements ActionListener { // 主要针对"图案"选项卡中的"前景"、"背景" if (this.setColorRealTime) { colorSelectable.setColor(Color.WHITE); // setColor 可以关闭弹窗 - try { - Thread.sleep(100); // 等待弹窗关闭 - } catch (InterruptedException e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - Thread.currentThread().interrupt(); - } - colorPickerPanel.captureScreen(); + // REPORT-82110 确保关闭所有弹窗后截屏 + SwingUtilities.invokeLater(() -> { + colorPickerPanel.captureScreen(); + }); } } diff --git a/designer-base/src/main/java/com/fr/design/style/color/UIToolbarColorButton.java b/designer-base/src/main/java/com/fr/design/style/color/UIToolbarColorButton.java index 9a8640f62..11fe15446 100644 --- a/designer-base/src/main/java/com/fr/design/style/color/UIToolbarColorButton.java +++ b/designer-base/src/main/java/com/fr/design/style/color/UIToolbarColorButton.java @@ -153,12 +153,22 @@ public class UIToolbarColorButton extends UICombinationButton implements PopupHi popupWin = null; } + // 取色器取色时,隐藏弹出框,无需经过macOS的判断 + public void hidePopupMenu4PickColor() { + if (popupWin != null) { + popupWin.setVisible(false); + } + + popupWin = null; + } + private ColorControlWindow getColorControlWindow() { //find parant. if (this.popupWin == null) { this.popupWin = new ColorControlWindow(this.isCanBeNull(), UIToolbarColorButton.this) { @Override protected void colorChanged() { + hidePopupMenu4PickColor(); UIToolbarColorButton.this.setColor(this.getColor()); } From 828671fce4d3f9d67203d6474450d0019aaf8a9f Mon Sep 17 00:00:00 2001 From: levy Date: Mon, 24 Oct 2022 18:33:07 +0800 Subject: [PATCH 2/3] =?UTF-8?q?REPORT-82110=20=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E5=8F=96=E8=89=B2bug=20=E3=80=90=E9=97=AE=E9=A2=98=E5=8E=9F?= =?UTF-8?q?=E5=9B=A0=E3=80=91=E5=8F=96=E8=89=B2=E5=99=A8ColorPicker?= =?UTF-8?q?=E5=8F=96=E8=89=B2=E6=98=AF=E5=9F=BA=E4=BA=8E=E6=88=AA=E5=B1=8F?= =?UTF-8?q?=E5=90=8E=E8=AF=BB=E5=8F=96=E9=A2=9C=E8=89=B2=E7=9A=84=EF=BC=8C?= =?UTF-8?q?=E5=9B=A0=E6=AD=A4=E9=9C=80=E7=A1=AE=E4=BF=9D=E5=BC=B9=E5=87=BA?= =?UTF-8?q?=E6=A1=86=E5=85=A8=E9=83=A8=E5=85=B3=E9=97=AD=E5=90=8E=E6=88=AA?= =?UTF-8?q?=E5=B1=8F=E3=80=82=20=E3=80=90=E6=94=B9=E5=8A=A8=E6=80=9D?= =?UTF-8?q?=E8=B7=AF=E3=80=911=E3=80=81=E5=8F=96=E8=89=B2=E5=89=8D?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0hidePopupMenu=E7=9A=84=E6=93=8D=E4=BD=9C=202?= =?UTF-8?q?=E3=80=81=E4=BD=BF=E7=94=A8invokeLater=E7=A1=AE=E4=BF=9D?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=E4=BB=BB=E5=8A=A1=E6=89=A7=E8=A1=8C=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E5=90=8E=E6=88=AA=E5=B1=8F=203=E3=80=81=E4=B8=BA?= =?UTF-8?q?=E8=A7=84=E9=81=BFREPORT-25645=E7=9A=84macOS=E9=80=82=E9=85=8D?= =?UTF-8?q?=E9=97=AE=E9=A2=98,=E6=96=B0=E5=A2=9EhidePopupMenu4PickColor?= =?UTF-8?q?=E7=9A=84=E6=96=B9=E6=B3=95=20=E3=80=90Review=E5=BB=BA=E8=AE=AE?= =?UTF-8?q?=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/style/color/ColorPicker.java | 5 +---- .../java/com/fr/design/style/color/UIToolbarColorButton.java | 5 +++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/style/color/ColorPicker.java b/designer-base/src/main/java/com/fr/design/style/color/ColorPicker.java index baf7920e1..067d82f9c 100644 --- a/designer-base/src/main/java/com/fr/design/style/color/ColorPicker.java +++ b/designer-base/src/main/java/com/fr/design/style/color/ColorPicker.java @@ -67,13 +67,10 @@ public class ColorPicker extends JDialog implements ActionListener { hideCursor(); // 如果要求实时变化,确保先关闭弹窗,再截屏 - // 主要针对"图案"选项卡中的"前景"、"背景" if (this.setColorRealTime) { colorSelectable.setColor(Color.WHITE); // setColor 可以关闭弹窗 // REPORT-82110 确保关闭所有弹窗后截屏 - SwingUtilities.invokeLater(() -> { - colorPickerPanel.captureScreen(); - }); + SwingUtilities.invokeLater(colorPickerPanel :: captureScreen); } } diff --git a/designer-base/src/main/java/com/fr/design/style/color/UIToolbarColorButton.java b/designer-base/src/main/java/com/fr/design/style/color/UIToolbarColorButton.java index 11fe15446..8627f27a5 100644 --- a/designer-base/src/main/java/com/fr/design/style/color/UIToolbarColorButton.java +++ b/designer-base/src/main/java/com/fr/design/style/color/UIToolbarColorButton.java @@ -153,12 +153,13 @@ public class UIToolbarColorButton extends UICombinationButton implements PopupHi popupWin = null; } - // 取色器取色时,隐藏弹出框,无需经过macOS的判断 + /** + * 取色器取色时隐藏弹出框,与另一个hide的区别是无需经过macOS的判断,以规避REPORT-25645的mac适配bug + */ public void hidePopupMenu4PickColor() { if (popupWin != null) { popupWin.setVisible(false); } - popupWin = null; } From 88790a4fec33864193006bf7e2e4908804133656 Mon Sep 17 00:00:00 2001 From: levy Date: Mon, 24 Oct 2022 18:53:38 +0800 Subject: [PATCH 3/3] =?UTF-8?q?REPORT-79296=20=E6=8A=A5=E8=A1=A8=E5=BC=95?= =?UTF-8?q?=E6=93=8E=E5=B1=9E=E6=80=A7=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=85=A8?= =?UTF-8?q?=20=E3=80=90=E9=97=AE=E9=A2=98=E5=8E=9F=E5=9B=A0=E3=80=91?= =?UTF-8?q?=E6=9C=AA=E8=80=83=E8=99=91i8n=E8=8B=B1=E6=96=87=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E4=B8=8B=E7=9A=84Label=E8=87=AA=E5=8A=A8=E6=8D=A2?= =?UTF-8?q?=E8=A1=8C=20=E3=80=90=E6=94=B9=E5=8A=A8=E6=80=9D=E8=B7=AF?= =?UTF-8?q?=E3=80=91=E5=B0=86=E6=B6=89=E5=8F=8A=E5=88=B0=E7=9A=84Label?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=8D=A2=E8=A1=8C=E5=A4=84=E7=90=86=EF=BC=8C?= =?UTF-8?q?=E7=95=A5=E4=BF=AE=E6=94=B9=E4=BA=86=E5=8E=9F=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=88=9B=E5=BB=BApanel=E7=9A=84=E5=B8=83=E5=B1=80=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=EF=BC=8C=E5=AE=9E=E9=99=85=E6=98=BE=E7=A4=BA=E6=95=88?= =?UTF-8?q?=E6=9E=9C=E6=97=A0=E5=8F=98=E5=8C=96=E3=80=82=20=E3=80=90Review?= =?UTF-8?q?=E5=BB=BA=E8=AE=AE=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/report/ReportEnginePane.java | 79 ++++++++++--------- 1 file changed, 41 insertions(+), 38 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/report/ReportEnginePane.java b/designer-realize/src/main/java/com/fr/design/report/ReportEnginePane.java index b29de8855..15dd2a3ea 100644 --- a/designer-realize/src/main/java/com/fr/design/report/ReportEnginePane.java +++ b/designer-realize/src/main/java/com/fr/design/report/ReportEnginePane.java @@ -12,12 +12,14 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.widget.FRWidgetFactory; import com.fr.general.SiteCenter; import com.fr.log.FineLoggerFactory; import com.fr.report.core.ReportUtils; import com.fr.report.stable.LayerReportAttr; import com.fr.report.worksheet.WorkSheet; import com.fr.stable.ProductConstants; + import javax.swing.AbstractButton; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; @@ -26,13 +28,11 @@ import javax.swing.JLayeredPane; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; -import javax.swing.SwingConstants; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Desktop; import java.awt.Dimension; -import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; @@ -86,7 +86,7 @@ public class ReportEnginePane extends BasicBeanPane { outAdvicePane.add(createAdvicePane()); } - private JPanel createReportEnginePane(){ + private JPanel createReportEnginePane() { JPanel reportEnginePane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_M_Pane(); JPanel clientPagingPane = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); clientPaging = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Enable_Client_Page")); @@ -102,7 +102,7 @@ public class ReportEnginePane extends BasicBeanPane { return reportEnginePane; } - private JPanel createPagingEngineSelectPane(){ + private JPanel createPagingEngineSelectPane() { engineSettingPane = new JLayeredPane(); engineSettingPane.setPreferredSize(new Dimension(570, 240)); engineSettingPane.setBounds(0, 0, 570, 240); @@ -121,8 +121,8 @@ public class ReportEnginePane extends BasicBeanPane { /** * 目前先屏蔽,后面新引擎显示页码再加上相关代码 - * */ - private void createEngineXSettingPane(){ + */ + private void createEngineXSettingPane() { outEngineXSettingPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_New_Engine")); outEngineXSettingPane.setBounds(0, 0, 570, 240); JPanel engineXSettingPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_M_Pane(); @@ -146,7 +146,7 @@ public class ReportEnginePane extends BasicBeanPane { outEngineXSettingPane.add(engineXSettingPane); } - private void createLineEngineSettingPane(){ + private void createLineEngineSettingPane() { outLineEngineSettingPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Line_Engine")); outLineEngineSettingPane.setBounds(0, 0, 570, 240); JPanel lineEngineSettingPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_M_Pane(); @@ -166,9 +166,9 @@ public class ReportEnginePane extends BasicBeanPane { outLineEngineSettingPane.add(lineEngineSettingPane); } - private JPanel createTipPane(String tipText){ + private JPanel createTipPane(String tipText) { JPanel tipPane = new JPanel(); - UILabel tip = new UILabel(tipText, SwingConstants.LEFT); + UILabel tip = FRWidgetFactory.createLineWrapLabel(tipText, 420); tip.setForeground(new Color(128, 128, 128)); tipPane.add(tip); return tipPane; @@ -184,20 +184,19 @@ public class ReportEnginePane extends BasicBeanPane { return pageQueryPane; } - private JPanel createAdvicePane(){ - JPanel advicePane = new JPanel(new BorderLayout()); - FRExplainLabel topExplainLabel = new FRExplainLabel(Toolkit.i18nText("Fine-Design_Report_Report_Engine_Warnning_Info")); - advicePane.add(topExplainLabel, BorderLayout.NORTH); + private JPanel createAdvicePane() { + JPanel advicePane = new JPanel(FRGUIPaneFactory.create1ColumnGridLayout()); + // 上侧文字 + UILabel topExplainLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Report_Report_Engine_Warnning_Info"), 480); topExplainLabel.setForeground(new Color(0, 0, 0)); - FlowLayout flowLayout = new FlowLayout(FlowLayout.LEADING); - flowLayout.setHgap(0); - flowLayout.setVgap(0); - JPanel adviceDownPane = new JPanel(flowLayout); - advicePane.add(adviceDownPane, BorderLayout.CENTER); - FRExplainLabel downExplainLabel = new FRExplainLabel(Toolkit.i18nText("Fine-Design_Report_Report_Detail_Reference")); + advicePane.add(topExplainLabel); + // 下侧文字及链接 + JPanel adviceDownPane = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); + advicePane.add(adviceDownPane); + UILabel downExplainLabel = new UILabel(Toolkit.i18nText("Fine-Design_Report_Report_Detail_Reference")); adviceDownPane.add(downExplainLabel); downExplainLabel.setForeground(new Color(0, 0, 0)); - JLabel helper = new FRExplainLabel( com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Community_Help")); + JLabel helper = new FRExplainLabel(Toolkit.i18nText("Fine-Design_Report_Community_Help")); helper.setForeground(new Color(1, 159, 222)); adviceDownPane.add(helper); helper.addMouseListener(new MouseAdapter() { @@ -213,7 +212,7 @@ public class ReportEnginePane extends BasicBeanPane { return advicePane; } - private JPanel createPagingEngineRadioPanel(){ + private JPanel createPagingEngineRadioPanel() { UIRadioButton newEngine = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_New_Engine"), true); UIRadioButton lineEngine = new UIRadioButton(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Line_Engine"), false); ButtonGroup buttonGroup = new ButtonGroup(); @@ -225,7 +224,7 @@ public class ReportEnginePane extends BasicBeanPane { double[] rowSize = {p}; double[] columnSize = {p, p, p, p, p}; Component[][] components = new Component[][]{ - new Component[] { + new Component[]{ newEngine, lineEngine } @@ -243,7 +242,7 @@ public class ReportEnginePane extends BasicBeanPane { @Override public void populateBean(LayerReportAttr ob) { - if (ob == null){ + if (ob == null) { setDefaultAttr(); return; } @@ -252,14 +251,14 @@ public class ReportEnginePane extends BasicBeanPane { engineSettingPane.setVisible(true); radioButtons.get(0).setSelected(ob.getEngineState() == LayerReportAttr.ENGINE_X); radioButtons.get(1).setSelected(ob.getEngineState() == LayerReportAttr.LINE_ENGINE); - if (ob.getEngineState() == LayerReportAttr.ENGINE_X){ + if (ob.getEngineState() == LayerReportAttr.ENGINE_X) { engineSettingPane.moveToFront(outEngineXSettingPane); outEngineXSettingPane.setVisible(true); outLineEngineSettingPane.setVisible(false); engineXCountPerPageEditor.setValue(new Integer(ob.getCountPerPage())); engineXPageQueryBox.setSelected(ob.isPageQuery()); engineXPageQueryPane.setVisible(ob.isPageQuery()); - }else { + } else { engineSettingPane.moveToFront(outLineEngineSettingPane); outEngineXSettingPane.setVisible(false); outLineEngineSettingPane.setVisible(true); @@ -275,16 +274,16 @@ public class ReportEnginePane extends BasicBeanPane { //这里注意一下怎么更新的,后续可能存在判断为空的调用,从而对老引擎造成影响。 LayerReportAttr attr = new LayerReportAttr(); attr.setClientPaging(clientPaging.isSelected()); - for (int i = 0; i < radioButtons.size(); i++){ - if (radioButtons.get(i).isSelected()){ + for (int i = 0; i < radioButtons.size(); i++) { + if (radioButtons.get(i).isSelected()) { attr.setEngineState(i); } } - if (attr.getEngineState() == LayerReportAttr.ENGINE_X){ + if (attr.getEngineState() == LayerReportAttr.ENGINE_X) { attr.setEnableRowCount(rowCountBox.isSelected()); attr.setCountPerPage(engineXCountPerPageEditor.getValue().intValue()); attr.setPageQuery(engineXPageQueryBox.isSelected()); - }else { + } else { attr.setPageQuery(lineEnginePageQueryBox.isSelected()); attr.setCountPerPage(lineEngineCountPerPageEditor.getValue()); } @@ -304,7 +303,8 @@ public class ReportEnginePane extends BasicBeanPane { } } } - public void setDefaultAttr(){ + + public void setDefaultAttr() { clientPaging.setSelected(false); lineEngineCountPerPageEditor.setValue(30); lineEnginePageQueryBox.setSelected(false); @@ -315,26 +315,29 @@ public class ReportEnginePane extends BasicBeanPane { private class SelectActionListener implements ActionListener { private AbstractButton source; private JPanel target; - private SelectActionListener(AbstractButton source, JPanel target){ + + private SelectActionListener(AbstractButton source, JPanel target) { this.source = source; this.target = target; } + @Override public void actionPerformed(ActionEvent e) { - if (source.isSelected()){ + if (source.isSelected()) { target.setVisible(true); - }else { + } else { target.setVisible(false); } } } - private class EngineSelectActionListener implements ActionListener{ + private class EngineSelectActionListener implements ActionListener { private AbstractButton source; private JLayeredPane target; private JPanel showTarget; private JPanel notShowTarget; - private EngineSelectActionListener(AbstractButton source, JLayeredPane target, JPanel showTarget, JPanel notShowTarget){ + + private EngineSelectActionListener(AbstractButton source, JLayeredPane target, JPanel showTarget, JPanel notShowTarget) { this.source = source; this.target = target; this.showTarget = showTarget; @@ -344,15 +347,15 @@ public class ReportEnginePane extends BasicBeanPane { /** * 由于屏蔽了新引擎设置,由于新引擎设置界面是空的,行式引擎的设置界面会显示出来,因此每次界面转换时,将不需要显示的界面屏蔽。 * 不需要屏蔽新引擎设置时,就不需要showTarget.setVisible(true);notShowTarget.setVisible(false);这两行代码了 - * **/ + **/ @Override public void actionPerformed(ActionEvent e) { - if (source.isSelected()){ + if (source.isSelected()) { target.setVisible(true); showTarget.setVisible(true); notShowTarget.setVisible(false); target.moveToFront(showTarget); - }else { + } else { target.setVisible(false); } }